Statistik DML terpartisi aktif

Active Partitioned Data Manipulation Language (DML) memberikan progres real time untuk DML yang dipartisi yang saat ini aktif dalam database Anda.

Spanner menyediakan tabel bawaan, SPANNER_SYS.ACTIVE_PARTITIONED_DMLS, yang mencantumkan DML terpartisi yang berjalan dan progres yang dibuat pada DML tersebut.

Dalam artikel ini, kami akan menjelaskan tabel ini secara mendetail, menunjukkan beberapa contoh kueri yang menggunakan tabel ini, dan, terakhir, mendemonstrasikan cara menggunakan kueri ini untuk membantu mengurangi masalah yang disebabkan oleh DML terpartisi aktif.

Ketersediaan

Data SPANNER_SYS hanya tersedia melalui antarmuka SQL; misalnya:

Metode pembacaan tunggal lainnya yang disediakan Spanner tidak mendukung SPANNER_SYS.

ACTIVE_PARTITIONED_DMLS

SPANNER_SYS.ACTIVE_PARTITIONED_DMLS menampilkan daftar DML aktif yang dipartisi dan diurutkan berdasarkan waktu mulainya.

Skema tabel

Berikut ini adalah skema tabel untuk SPANNER_SYS.ACTIVE_PARTITIONED_DMLS.

Nama kolom Jenis Deskripsi
TEXT STRING Teks pernyataan kueri DML yang dipartisi.
TEXT_FINGERPRINT INT64 Sidik jari adalah hash dari teks DML yang dipartisi.
SESSION_ID STRING ID sesi yang menjalankan DML yang dipartisi. Menghapus ID sesi akan membatalkan kueri.
NUM_PARTITIONS_TOTAL INT64 Jumlah total partisi dalam DML yang dipartisi.
NUM_PARTITIONS_COMPLETE INT64 Jumlah partisi yang telah diselesaikan oleh DML yang dipartisi.
NUM_TRIVIAL_PARTITIONS_COMPLETE INT64 Jumlah partisi lengkap tanpa baris yang diproses.
PROGRESS DOUBLE Progres DML yang dipartisi dihitung sebagai jumlah partisi non-trivial yang selesai dibagi dengan jumlah total partisi non-trivial.
ROWS_PROCESSED INT64 Jumlah baris yang diproses sejauh ini, diperbarui setelah setiap partisi selesai.
START_TIMESTAMP. TIMESTAMP Batas atas pada waktu mulai DML yang dipartisi.
LAST_UPDATE_TIMESTAMP TIMESTAMP Stempel waktu terakhir saat DML yang dipartisi membuat progres. Diperbarui setelah partisi selesai.

Contoh kueri

Anda dapat menjalankan contoh pernyataan SQL berikut menggunakan library klien, Google Cloud CLI, atau Konsol Google Cloud.

Mencantumkan kueri terlama yang berjalan

Kueri berikut menampilkan daftar DML terpartisi yang berjalan dan diurutkan berdasarkan waktu mulai kueri.

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;
teks session_id num_partitions_total num_partitions_complete num_trivial_partitions_complete progres rows_processed start_timestamp last_update_timestamp
PERBARUI Konser SET VenueId = \'tempat menakjubkan\' WHERE SingerId < 900000 5bd37a99-200c-5d2e-9021-15d0dbbd97e6 27 15 3 50,00% 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 from Singers WHERE SingerId > 1000000 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 Penyanyi SETEL MarketingBudget = 1.000 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

Batasan

Penggunaan tabel SPANNER_SYS.ACTIVE_PARTITIONED_DMLS memiliki batasan berikut:

  • Hasil PROGRESS, ROWS_PROCESSED, dan LAST_UPDATE_TIMESTAMP bertambah pada batas partisi yang selesai sehingga DML yang dipartisi dapat terus memperbarui baris, sementara nilai dalam ketiga kolom ini tetap sama.

  • Jika ada jutaan partisi dalam DML yang dipartisi, nilai dalam kolom PROGRESS mungkin tidak menangkap semua progres inkremental. Gunakan NUM_PARTITIONS_COMPLETE dan NUM_TRIVIAL_PARTITIONS_COMPLETE untuk merujuk progres perincian yang lebih baik.

  • Jika Anda membatalkan DML yang dipartisi menggunakan permintaan RPC, DML terpartisi yang dibatalkan mungkin masih muncul dalam tabel. Jika Anda membatalkan DML yang dipartisi menggunakan penghapusan sesi, DML tersebut akan segera dihapus dari tabel. Untuk informasi selengkapnya, lihat Menghapus ID sesi.

Menggunakan data kueri DML terpartisi aktif untuk memecahkan masalah penggunaan CPU yang tinggi

Statistik kueri dan statistik transaksi memberikan informasi yang berguna saat memecahkan masalah latensi di database Spanner. Alat-alat ini memberikan informasi tentang kueri yang telah selesai. Namun, terkadang Anda perlu mengetahui apa yang berjalan di dalam sistem. Misalnya, pertimbangkan skenario saat penggunaan CPU tinggi dan Anda ingin menjawab pertanyaan berikut.

  • Berapa banyak DML terpartisi yang berjalan saat ini?
  • Apa saja DML yang dipartisi ini?
  • Berapa banyak dari DML yang dipartisi tersebut berjalan untuk waktu yang lama?
  • Sesi manakah yang menjalankan kueri?

Jika memiliki jawaban untuk pertanyaan sebelumnya, Anda dapat memutuskan untuk melakukan tindakan berikut.

  • Hapus sesi yang menjalankan kueri untuk penyelesaian langsung.
  • Mengurangi frekuensi DML yang dipartisi.

Dalam panduan berikut, kita memeriksa DML terpartisi aktif dan menentukan tindakan yang akan diambil, jika ada.

Mengambil ringkasan DML terpartisi aktif

Dalam contoh skenario, kita melihat penggunaan CPU yang lebih tinggi daripada biasanya, jadi kita memutuskan untuk menjalankan kueri berikut untuk menampilkan jumlah DML terpartisi aktif.

SELECT count(*) as active_count
FROM spanner_sys.active_partitioned_dmls;

Kueri tersebut memberikan hasil berikut.

active_count
22

Membuat daftar 2 DML terpartisi terlama yang masih berjalan

Kemudian, kita dapat menjalankan kueri untuk menemukan informasi lebih lanjut tentang 2 DML terpartisi yang berjalan paling lama dan diurutkan berdasarkan waktu mulai DML yang dipartisi.

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;
teks session_id num_partitions_total num_partitions_complete num_trivial_partitions_complete progres rows_processed start_timestamp last_update_timestamp
PERBARUI Konser SET VenueId = \'tempat menakjubkan\' WHERE SingerId < 900000 5bd37a99-200c-5d2e-9021-15d0dbbd97e6 27 15 3 50,00% 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

Membatalkan kueri yang mahal

Kami menemukan DML terpartisi yang telah berjalan selama berhari-hari dan tidak ada kemajuan. Oleh karena itu, kita dapat menjalankan perintah gcloud spanner databases sessions delete berikut untuk menghapus sesi menggunakan ID sesi yang membatalkan DML yang telah dipartisi.

gcloud spanner databases sessions delete\
   5bd37a99-200c-5d2e-9021-15d0dbbd97e6 \
    --database=singer_db --instance=test-instance

Langkah selanjutnya