A linguagem de manipulação de dados (DML) particionada ativa fornece o progresso em tempo real das DMLs particionadas que estão ativas na sua base de dados.
O Spanner fornece uma tabela incorporada, SPANNER_SYS.ACTIVE_PARTITIONED_DMLS
, que apresenta as DMLs particionadas em execução e o progresso feito nas mesmas.
Esta página descreve a tabela detalhadamente, mostra alguns exemplos de consultas que usam esta tabela e, por fim, demonstra como usar estas consultas para ajudar a mitigar problemas causados por DMLs particionados ativos. As informações nesta página aplicam-se a bases de dados com o dialeto GoogleSQL e bases de dados com o dialeto PostgreSQL.
Aceda a estatísticas de DML particionadas ativas
O Spanner fornece as estatísticas de DML particionadas ativas no esquema SPANNER_SYS
. Pode usar as seguintes formas para aceder aos dados do SPANNER_SYS
:
A página Spanner Studio de uma base de dados na Google Cloud consola.
O comando
gcloud spanner databases execute-sql
O método
executeSql
ou o métodoexecuteStreamingSql
.
Os seguintes métodos de leitura única fornecidos pelo Spanner não suportam o SPANNER_SYS
:
- Executar uma leitura forte a partir de uma única linha ou de várias linhas numa tabela.
- Executar uma leitura desatualizada de uma única linha ou várias linhas numa tabela.
- Leitura de uma única linha ou várias linhas num índice secundário.
ACTIVE_PARTITIONED_DMLS
SPANNER_SYS.ACTIVE_PARTITIONED_DMLS
devolve uma lista de DMLs particionadas ativas
ordenadas pela respetiva hora de início.
Esquema da tabela
A tabela seguinte mostra o esquema da tabela SPANNER_SYS.ACTIVE_PARTITIONED_DMLS.
Nome da coluna | Tipo | Descrição |
---|---|---|
TEXT |
STRING |
O texto da declaração de 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á a executar o DML particionado. A eliminação do ID da sessão cancela 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 o DML particionado concluiu. |
NUM_TRIVIAL_PARTITIONS_COMPLETE |
INT64 |
O número de partições completas em que não foram processadas linhas. |
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 para a hora de início de um DML particionado. |
LAST_UPDATE_TIMESTAMP |
TIMESTAMP |
Data/hora da última vez que a DML particionada progrediu. Atualizado após a conclusão de uma partição. |
Consultas de exemplo
Pode executar as seguintes declarações SQL de exemplo através das bibliotecas de cliente, da Google Cloud CLI ou da Google Cloud consola.
Apresentar as consultas em execução mais antigas
A consulta seguinte devolve uma lista de DMLs particionados em execução ordenados pela hora 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 | 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,00% | 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,00% | 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
A utilização 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 das partições concluídas, pelo que a DML particionada pode continuar a atualizar linhas enquanto os valores nestes três campos permanecem iguais.Se existirem milhões de partições num DML particionado, o valor na coluna
PROGRESS
pode não captar todo o progresso incremental. UseNUM_PARTITIONS_COMPLETE
eNUM_TRIVIAL_PARTITIONS_COMPLETE
para consultar o progresso com maior detalhe.Se cancelar um DML particionado através de um pedido RPC, o DML particionado cancelado pode continuar a aparecer na tabela. Se cancelar um DML particionado através da eliminação da sessão, este é removido imediatamente da tabela. Para mais informações, consulte o artigo Eliminar o ID da sessão.
Use dados de consultas DML particionadas ativas para resolver problemas de utilização elevada da CPU
As estatísticas de consultas e as estatísticas de transações fornecem informações úteis quando resolve problemas de latência numa base de dados do Spanner. Estas ferramentas fornecem informações sobre as consultas que já foram concluídas. No entanto, por vezes, é necessário saber o que está a ser executado no sistema. Por exemplo, considere o cenário em que a utilização da CPU é elevada e quer responder às seguintes perguntas.
- Quantas DMLs particionadas estão a ser executadas neste momento?
- O que são estas DMLs particionadas?
- Quantas dessas DMLs particionadas estão em execução durante muito tempo?
- Que sessão está a executar a consulta?
Se tiver respostas para as perguntas anteriores, pode decidir tomar a seguinte ação.
- Eliminar a sessão que executa a consulta para uma resolução imediata.
- Reduza a frequência de uma DML particionada.
No seguinte passo a passo, examinamos os DMLs particionados ativos e determinamos que ação, se aplicável, tomar.
Recupere um resumo das DMLs particionadas ativas
No nosso cenário de exemplo, verificamos uma utilização da CPU superior ao normal, pelo que decidimos executar a seguinte consulta para devolver a contagem de DMLs particionados ativos.
SELECT count(*) as active_count
FROM spanner_sys.active_partitioned_dmls;
A consulta produz o seguinte resultado.
active_count |
---|
22 |
Apresentar as 2 DMLs particionadas em execução mais antigas
Em seguida, podemos executar uma consulta para encontrar mais informações sobre os 2 DMLs particionados mais antigos em execução, ordenados pela hora de início do DML particionado.
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 | 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,00% | 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 |
Cancele uma consulta dispendiosa
Encontrámos um DML particionado que está em execução há dias e não está a fazer
progressos. Por conseguinte, podemos executar o seguinte comando gcloud spanner databases sessions
delete
para eliminar a sessão através do ID da sessão, o que cancela o DML particionado.
gcloud spanner databases sessions delete\
5bd37a99-200c-5d2e-9021-15d0dbbd97e6 \
--database=singer_db --instance=test-instance
O que se segue?
- Saiba mais acerca de outras ferramentas de introspeção.
- Saiba mais sobre outras informações que o Spanner armazena para cada base de dados nas tabelas do esquema de informações da base de dados.
- Saiba mais sobre as práticas recomendadas de SQL para o Spanner.