A linguagem de manipulação de dados (DML) particionada ativa fornece progresso em tempo real para as DMLs particionadas ativas no seu banco de dados.
O Spanner fornece uma tabela integrada, SPANNER_SYS.ACTIVE_PARTITIONED_DMLS
, que lista as DMLs particionadas em execução e o progresso delas.
Nesta página, descrevemos a tabela em detalhes, mostramos alguns exemplos de consultas que a usam e, por fim, demonstramos como usar essas consultas para ajudar a mitigar problemas causados por DMLs particionadas ativas. As informações nesta página são aplicáveis a bancos de dados com dialetos GoogleSQL e PostgreSQL.
Acessar estatísticas ativas de DML particionada
O Spanner fornece as estatísticas de DML particionada ativa no esquema SPANNER_SYS
. Você pode usar as seguintes maneiras para acessar os dados do SPANNER_SYS
:
A página Spanner Studio de um banco de dados no console Google Cloud .
O comando
gcloud spanner databases execute-sql
.O método
executeSql
ouexecuteStreamingSql
.
Os seguintes métodos de leitura única fornecidos pelo Spanner
não são compatíveis com SPANNER_SYS
:
- realizar uma leitura forte de uma única linha ou de várias linhas em uma tabela;
- realizar uma leitura desatualizada de uma única linha ou várias linhas em uma tabela;
- ler uma única linha ou várias linhas em um índice secundário.
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
A seguir, mostramos o esquema da tabela SPANNER_SYS.ACTIVE_PARTITIONED_DMLS.
Nome da coluna | Tipo | Descrição |
---|---|---|
TEXT |
STRING |
O texto da instrução de consulta DML particionada. |
TEXT_FINGERPRINT |
INT64 |
A impressão digital é um hash do texto da DML particionada. |
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 que a DML particionada concluiu. |
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é agora, atualizado após a conclusão de cada partição. |
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 depois que uma partição é concluída. |
Exemplo de consultas
É possível executar as seguintes instruções SQL de exemplo usando as bibliotecas de cliente, a Google Cloud CLI ou o console doGoogle Cloud .
Como listar consultas em execução mais antigas
A consulta a seguir retorna uma lista de DMLs particionadas em execução classificadas pelo horário de início 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 |
---|---|---|---|---|---|---|---|---|
UPDATE Concerts SET VenueId = \'amazing venue\' WHERE SingerId < 900000 | 5bd37a99-200c-5d2e-9021-15d0dbbd97e6 | 27 | 15 | 3 | 50% | 2398654 | 2024-01-21 15:56:30.498744-08:00 | 2024-01-22 15:56:39.049799-08:00 |
UPDATE Singers SET LastName = NULL WHERE LastName = '' | 0028284f-0190-52f9-b396-aa588e034806 | 8 | 4 | 4 | 00,00% | 0 | 2024-01-22 15:55:18.498744-08:00 | 2024-01-22 15:56:28.049799-08:00 |
DELETE from Singers WHERE SingerId > 1000000 | 0071a85e-7e5c-576b-8a17-f9bc3d157eea | 8 | 4 | 3 | 20% | 238654 | 2024-01-22 15:56:30.498744-08:00 | 2024-01-22 15:56:19.049799-08:00 |
UPDATE Singers SET MarketingBudget = 1000 WHERE true | 036097a9-91d4-566a-a399-20c754eabdc2 | 8 | 5 | 0 | 62,50% | 238654 | 2024-01-22 15:57:47.498744-08:00 | 2024-01-22 15:57:39.049799-08:00 |
Limitações
O uso da tabela SPANNER_SYS.ACTIVE_PARTITIONED_DMLS
tem as seguintes limitações:
Os resultados de
PROGRESS
,ROWS_PROCESSED
eLAST_UPDATE_TIMESTAMP
são incrementados nos limites de partição concluídos. Assim, 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 na coluna
PROGRESS
talvez não capture todo o progresso incremental. UseNUM_PARTITIONS_COMPLETE
eNUM_TRIVIAL_PARTITIONS_COMPLETE
para se referir a um progresso de granularidade mais refinada.Se você cancelar uma DML particionada usando uma solicitação RPC, a DML particionada cancelada ainda poderá aparecer na tabela. Se você cancelar uma DML particionada usando a exclusão de sessão, ela será removida da tabela imediatamente. Para mais informações, consulte Excluir o ID da sessão.
Usar dados de consultas DML particionadas ativas para resolver problemas de alta utilização da CPU
As estatísticas de consulta e as estatísticas de transação fornecem informações úteis ao 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 utilização da CPU está alta e você quer responder às perguntas a seguir.
- Quantas DMLs particionadas estão em execução no momento?
- Quais são essas DMLs particionadas?
- Quantas dessas DMLs particionadas estão em execução há muito tempo?
- Qual sessão está executando a consulta?
Se você tiver respostas para as perguntas anteriores, poderá decidir tomar a seguinte ação.
- Exclua a sessão que executa a consulta para uma resolução imediata.
- Reduz a frequência de uma DML particionada.
No tutorial a seguir, examinamos DMLs particionadas ativas e determinamos qual ação tomar, se houver.
Recuperar um resumo das DMLs particionadas ativas
No nosso cenário de exemplo, notamos um uso maior do que o uso normal da CPU. Por isso, decidimos executar 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 apresenta o resultado a seguir.
active_count |
---|
22 |
Como listar as duas DMLs particionadas em execução mais antigas
Em seguida, podemos executar uma consulta para encontrar mais informações sobre as duas DMLs particionadas em execução mais antigas, 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 |
---|---|---|---|---|---|---|---|---|
UPDATE Concerts SET VenueId = \'amazing venue\' WHERE SingerId < 900000 | 5bd37a99-200c-5d2e-9021-15d0dbbd97e6 | 27 | 15 | 3 | 50% | 2398654 | 2024-01-21 15:56:30.498744-08:00 | 2024-01-22 15:56:39.049799-08:00 |
UPDATE Singers SET LastName = NULL WHERE LastName = '' | 0028284f-0190-52f9-b396-aa588e034806 | 8 | 4 | 4 | 00,00% | 0 | 2024-01-22 15:55:18.498744-08:00 | 2024-01-22 15:56:28.049799-08:00 |
Cancelar uma consulta cara
Encontramos uma DML particionada que está sendo executada há dias e não está progredindo. Assim, podemos executar o comando gcloud spanner databases sessions
delete
a seguir para excluir a sessão usando o ID dela, 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 nas tabelas de esquema de informações do banco de dados.
- Saiba mais sobre as práticas recomendadas de SQL para o Spanner.