A linguagem de manipulação de dados (DML) particionada ativa oferece o progresso das DMLs particionadas ativas no momento seu banco de dados.
O Spanner oferece uma tabela integrada,
SPANNER_SYS.ACTIVE_PARTITIONED_DMLS
, que lista DMLs particionadas em execução
e o progresso feito neles.
Neste artigo, vamos descrever a tabela em detalhes, mostrar alguns exemplos consultas que usam essa tabela e, por fim, demonstrar como usar essas consultas para reduzir os problemas causados por DMLs particionadas ativas.
Disponibilidade
Os dados do SPANNER_SYS
estão disponíveis somente nas interfaces SQL. Por exemplo:
A página do Spanner Studio de um banco de dados no console do Google Cloud
O comando
gcloud spanner databases execute-sql
A API
executeQuery
Outros métodos de leitura única fornecidos pelo Spanner não têm suporte
SPANNER_SYS
:
ACTIVE_PARTITIONED_DMLS
SPANNER_SYS.ACTIVE_PARTITIONED_DMLS
retorna uma lista de DMLs particionadas ativas classificadas pelo horário de início.
Esquema de tabela
Veja a seguir o esquema da tabela de SPANNER_SYS.ACTIVE_PARTITIONED_DMLS.
Nome da coluna | Tipo | Descrição |
---|---|---|
TEXT |
STRING |
O texto da instrução da consulta DML particionada. |
TEXT_FINGERPRINT |
INT64 |
A impressão digital é um hash do texto DML particionado. |
SESSION_ID |
STRING |
O ID da sessão que está executando a DML particionada. A exclusão do ID da sessão cancelará a consulta. |
NUM_PARTITIONS_TOTAL |
INT64 |
O número total de partições na DML particionada. |
NUM_PARTITIONS_COMPLETE |
INT64 |
O número de partições concluídas pela DML particionada. |
NUM_TRIVIAL_PARTITIONS_COMPLETE |
INT64 |
O número de partições completas em que nenhuma linha foi processada. |
PROGRESS |
DOUBLE |
O progresso de uma DML particionada é calculado como o número de partições não triviais concluídas dividido pelo número total de partições não triviais. |
ROWS_PROCESSED |
INT64 |
O número de linhas processadas até o momento, atualizado após cada partição ser concluída. |
START_TIMESTAMP |
TIMESTAMP |
Um limite superior no horário de início de uma DML particionada. |
LAST_UPDATE_TIMESTAMP |
TIMESTAMP |
Último carimbo de data/hora em que a DML particionada fez progresso. Atualizado após a conclusão de uma partição. |
Exemplo de consultas
É possível executar os seguintes exemplos de instruções SQL usando a interface client bibliotecas, os A Google Cloud CLI ou a Console do Google Cloud.
Como listar consultas em execução mais antigas
A consulta a seguir retorna uma lista de DMLs particionadas em execução classificadas pelo início momento da consulta.
SELECT text,
session_id,
num_partitions_total,
num_partitions_complete,
num_trivial_partitions_complete,
progress,
rows_processed,
start_timestamp,
last_update_timestamp
FROM spanner_sys.active_partitioned_dmls
ORDER BY start_timestamp ASC;
texto | session_id | num_partitions_total | num_partitions_complete | num_trivial_partitions_complete | para indicar seu progresso | rows_processed | start_timestamp | last_update_timestamp |
---|---|---|---|---|---|---|---|---|
ATUALIZAR shows SET VenueId = \"local incrível\" WHERE SingerId < 900.000 | 5bd37a99-200c-5d2e-9021-15d0dbbd97e6 | 27 | 15 | 3 | 50% | 2398654 | 21-01-2024 15:56:30.498744-08:00 | 22-01-2024 15:56:39.049799-08:00 |
UPDATE Singers SET LastName = NULL WHERE LastName = '' | 0028284f-0190-52f9-b396-aa588e034806 | 8 | 4 | 4 | 00,00% | 0 | 22-01-2024 15:55:18.498744-08:00 | 22-01-2024 15:56:28.049799-08:00 |
DELETE de Singers WHERE SingerId > 1.000.000 | 0071a85e-7e5c-576b-8a17-f9bc3d157eea | 8 | 4 | 3 | 20,00% | 238654 | 22-01-2024 15:56:30.498744-08:00 | 22-01-2024 15:56:19.049799-08:00 |
UPDATE Singers SET MarketingBudget = 1000 WHERE true | 036097a9-91d4-566a-a399-20c754eabdc2 | 8 | 5 | 0 | 62,50% | 238654 | 22-01-2024 15:57:47.498744-08:00 | 22-01-2024 15:57:39.049799-08:00 |
Limitações
O uso da tabela SPANNER_SYS.ACTIVE_PARTITIONED_DMLS
tem o seguinte
limitações:
PROGRESS
,ROWS_PROCESSED
eLAST_UPDATE_TIMESTAMP
resultados estão é incrementado nos limites de partição completos para que a DML particionada pode continuar atualizando linhas enquanto os valores nesses três campos permanecem os mesmos.Se houver milhões de partições em uma DML particionada, o valor em a coluna
PROGRESS
pode não capturar todo o progresso incremental. UsarNUM_PARTITIONS_COMPLETE
eNUM_TRIVIAL_PARTITIONS_COMPLETE
para indicar um progresso de granularidade mais fina.Se você cancelar uma DML particionada usando uma solicitação de RPC, o estado e a DML particionada ainda pode aparecer na tabela. Se você cancelar uma A DML usa a exclusão de sessão para removê-la da tabela imediatamente. Para saber mais, consulte Como excluir o ID da sessão.
Use dados de consultas de DML particionadas ativas para solucionar problemas de alta utilização da CPU
Estatísticas de consulta e estatísticas de transações oferecem informações úteis para solucionar problemas de latência em um banco de dados do Spanner. Essas ferramentas fornecem informações sobre as consultas que já foram concluídas. No entanto, às vezes é necessário saber o que está sendo executado no sistema. Por exemplo, considere o cenário em que a CPU utilização é alta e você quer responder às seguintes perguntas.
- Quantas DMLs particionadas estão em execução no momento?
- O que são DMLs particionadas?
- Quantas dessas DMLs particionadas estão em execução há muito tempo?
- Qual sessão está executando a consulta?
Se você tem respostas para as perguntas anteriores, pode fazer o seguinte à ação.
- Exclua a sessão que executa a consulta para uma resolução imediata.
- Reduzir a frequência de uma DML particionada.
No tutorial a seguir, vamos examinar as DMLs particionadas ativas e determinar qual ação será realizada, se houver.
Recuperar um resumo das DMLs particionadas ativas
Em nosso cenário de exemplo, notamos um uso de CPU maior do que o normal, então decidimos execute a consulta a seguir para retornar a contagem de DMLs particionadas ativas.
SELECT count(*) as active_count
FROM spanner_sys.active_partitioned_dmls;
A consulta gera o resultado a seguir.
active_count |
---|
22 |
Como listar as duas DMLs particionadas mais antigas em execução
Em seguida, podemos executar uma consulta para encontrar mais informações sobre os dois registros executar DMLs particionadas classificadas pelo horário de início da DML particionada.
SELECT text,
session_id,
num_partitions_total,
num_partitions_complete,
num_trivial_partitions_complete,
progress,
rows_processed,
start_timestamp,
last_update_timestamp
FROM spanner_sys.active_partitioned_dmls
ORDER BY start_timestamp ASC LIMIT 2;
texto | session_id | num_partitions_total | num_partitions_complete | num_trivial_partitions_complete | para indicar seu progresso | rows_processed | start_timestamp | last_update_timestamp |
---|---|---|---|---|---|---|---|---|
ATUALIZAR shows SET VenueId = \"local incrível\" WHERE SingerId < 900.000 | 5bd37a99-200c-5d2e-9021-15d0dbbd97e6 | 27 | 15 | 3 | 50% | 2398654 | 21-01-2024 15:56:30.498744-08:00 | 22-01-2024 15:56:39.049799-08:00 |
UPDATE Singers SET LastName = NULL WHERE LastName = '' | 0028284f-0190-52f9-b396-aa588e034806 | 8 | 4 | 4 | 00,00% | 0 | 22-01-2024 15:55:18.498744-08:00 | 22-01-2024 15:56:28.049799-08:00 |
Cancelar uma consulta cara
Encontramos uma DML particionada que está em execução há dias e não está progredindo. Podemos
Portanto, execute o seguinte gcloud spanner databases sessions delete
para excluir a sessão usando o ID da sessão, que cancela a DML particionada.
gcloud spanner databases sessions delete\
5bd37a99-200c-5d2e-9021-15d0dbbd97e6 \
--database=singer_db --instance=test-instance
A seguir
- Saiba mais sobre outras ferramentas de introspecção.
- Saiba mais sobre outras informações que o Spanner armazena para cada banco de dados no tabelas do esquema de informações do banco de dados.
- Saiba mais sobre práticas recomendadas de SQL para no Spanner.