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:
Halaman Spanner Studio database di konsol Google Cloud
Perintah
gcloud spanner databases execute-sql
executeQuery
API
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
, danLAST_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. GunakanNUM_PARTITIONS_COMPLETE
danNUM_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
- Pelajari alat Introspeksi lainnya.
- Pelajari informasi lain yang disimpan Spanner untuk setiap database dalam tabel skema informasi database.
- Pelajari praktik terbaik SQL untuk Spanner lebih lanjut.