Bahasa Pengolahan Data (DML) yang dipartisi aktif memberikan progres real-time untuk DML yang dipartisi yang aktif di database Anda.
Spanner menyediakan tabel bawaan, SPANNER_SYS.ACTIVE_PARTITIONED_DMLS
, yang mencantumkan DML berpartisi yang sedang berjalan dan progres yang dicapai.
Halaman ini menjelaskan tabel secara mendetail, menampilkan beberapa contoh kueri yang menggunakan tabel ini, dan terakhir, menunjukkan cara menggunakan kueri ini untuk membantu mengurangi masalah yang disebabkan oleh DML berpartisi aktif. Informasi di halaman ini berlaku untuk database dialek GoogleSQL dan database dialek PostgreSQL.
Mengakses statistik DML yang dipartisi aktif
Spanner menyediakan statistik DML yang dipartisi aktif dalam skema SPANNER_SYS
. Anda dapat menggunakan cara berikut untuk mengakses data SPANNER_SYS
:
Halaman Spanner Studio database di konsol Google Cloud .
Perintah
gcloud spanner databases execute-sql
.Metode
executeSql
atauexecuteStreamingSql
.
Metode baca tunggal berikut yang disediakan Spanner
tidak mendukung SPANNER_SYS
:
- Melakukan pembacaan yang kuat dari satu baris atau beberapa baris dalam tabel.
- Melakukan pembacaan basi dari satu baris atau beberapa baris dalam tabel.
- Membaca dari satu baris atau beberapa baris dalam indeks sekunder.
ACTIVE_PARTITIONED_DMLS
SPANNER_SYS.ACTIVE_PARTITIONED_DMLS
menampilkan daftar DML yang dipartisi aktif
yang diurutkan berdasarkan waktu mulainya.
Skema tabel
Berikut menunjukkan 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 yang tidak memproses baris. |
PROGRESS |
DOUBLE |
Progres DML berpartisi dihitung sebagai jumlah partisi non-trivial yang telah selesai dibagi dengan total jumlah partisi non-trivial. |
ROWS_PROCESSED |
INT64 |
Jumlah baris yang telah diproses, diperbarui setelah setiap partisi selesai. |
START_TIMESTAMP . |
TIMESTAMP |
Batas atas waktu mulai DML yang dipartisi. |
LAST_UPDATE_TIMESTAMP |
TIMESTAMP |
Stempel waktu terakhir saat DML berpartisi mengalami kemajuan. Diperbarui setelah partisi selesai. |
Contoh kueri
Anda dapat menjalankan pernyataan SQL contoh berikut menggunakan library klien, Google Cloud CLI, atau konsol.Google Cloud
Mencantumkan kueri yang berjalan paling lama
Kueri berikut menampilkan daftar DML yang dipartisi yang sedang berjalan, yang 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 biasa | session_id | num_partitions_total | num_partitions_complete | num_trivial_partitions_complete | progres | 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 | 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 | 2024-01-22 15:55:18.498744-08:00 | 22-01-2024 15.56.28.049799-08:00 |
DELETE dari Penyanyi 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 | 22-01-2024 15.57.47.498744-08:00 | 2024-01-22 15:57:39.049799-08:00 |
Batasan
Penggunaan tabel SPANNER_SYS.ACTIVE_PARTITIONED_DMLS
memiliki batasan berikut:
Hasil
PROGRESS
,ROWS_PROCESSED
, danLAST_UPDATE_TIMESTAMP
akan ditambah di batas partisi yang telah 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 mencakup semua progres inkremental. GunakanNUM_PARTITIONS_COMPLETE
danNUM_TRIVIAL_PARTITIONS_COMPLETE
untuk merujuk progres perincian yang lebih baik.Jika Anda membatalkan DML berpartisi menggunakan permintaan RPC, DML berpartisi yang dibatalkan mungkin masih muncul dalam tabel. Jika Anda membatalkan DML berpartisi menggunakan penghapusan sesi, DML tersebut akan segera dihapus dari tabel. Untuk mengetahui informasi selengkapnya, lihat Menghapus ID sesi.
Menggunakan data kueri DML yang dipartisi aktif untuk memecahkan masalah pemanfaatan CPU yang tinggi
Statistik kueri dan statistik transaksi memberikan informasi yang berguna saat memecahkan masalah latensi dalam database Spanner. Alat ini memberikan informasi tentang kueri yang telah selesai. Namun, terkadang perlu diketahui apa yang berjalan di sistem. Misalnya, pertimbangkan skenario saat pemakaian CPU tinggi dan Anda ingin menjawab pertanyaan berikut.
- Berapa banyak DML yang dipartisi yang berjalan saat ini?
- Apa yang dimaksud dengan DML yang dipartisi ini?
- Berapa banyak DML yang dipartisi tersebut yang berjalan dalam waktu lama?
- Sesi mana yang menjalankan kueri?
Jika Anda memiliki jawaban untuk pertanyaan sebelumnya, Anda dapat memutuskan untuk mengambil tindakan berikut.
- Hapus sesi yang menjalankan kueri untuk segera menyelesaikan masalah.
- Mengurangi frekuensi DML yang dipartisi.
Dalam panduan berikut, kita akan memeriksa DML yang dipartisi aktif dan menentukan tindakan apa yang perlu dilakukan, jika ada.
Mengambil ringkasan DML yang dipartisi aktif
Dalam contoh skenario, kami melihat penggunaan CPU yang lebih tinggi dari biasanya, jadi kami memutuskan untuk menjalankan kueri berikut untuk menampilkan jumlah DML yang dipartisi aktif.
SELECT count(*) as active_count
FROM spanner_sys.active_partitioned_dmls;
Kueri menghasilkan hasil berikut.
active_count |
---|
22 |
Mencantumkan 2 DML yang dipartisi yang berjalan paling lama
Kemudian, kita dapat menjalankan kueri untuk menemukan informasi selengkapnya tentang 2 DML berpartisi yang berjalan paling lama dan diurutkan berdasarkan waktu mulai DML berpartisi.
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 biasa | session_id | num_partitions_total | num_partitions_complete | num_trivial_partitions_complete | progres | 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 | 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 | 2024-01-22 15:55:18.498744-08:00 | 22-01-2024 15.56.28.049799-08:00 |
Membatalkan kueri yang mahal
Kami menemukan DML yang dipartisi telah berjalan selama berhari-hari dan tidak
menunjukkan progres. Oleh karena itu, kita dapat menjalankan perintah gcloud spanner databases sessions
delete
berikut untuk menghapus sesi menggunakan ID sesi yang membatalkan DML berpartisi.
gcloud spanner databases sessions delete\
5bd37a99-200c-5d2e-9021-15d0dbbd97e6 \
--database=singer_db --instance=test-instance
Langkah berikutnya
- Pelajari alat Introspeksi lainnya.
- Pelajari informasi lain yang disimpan Spanner untuk setiap database di tabel skema informasi database.
- Pelajari lebih lanjut praktik terbaik SQL untuk Spanner.