Halaman ini menjelaskan cara menggunakan metrik dan diagram penggunaan CPU, beserta alat introspeksi lainnya, untuk menyelidiki penggunaan CPU yang tinggi di database Anda.
Mengidentifikasi apakah tugas sistem atau pengguna menyebabkan pemakaian CPU yang tinggi
KonsolGoogle Cloud menyediakan beberapa alat pemantauan untuk Spanner, sehingga Anda dapat melihat status metrik paling penting untuk instance Anda. Salah satunya adalah diagram yang disebut Penggunaan CPU - Total. Diagram ini menunjukkan total penggunaan CPU, sebagai persentase dari resource CPU instance, yang dikelompokkan menurut prioritas tugas dan jenis operasi. Ada dua jenis tugas: tugas pengguna, seperti baca dan tulis, serta tugas sistem, yang mencakup tugas latar belakang otomatis seperti pemadatan dan pengisian ulang indeks.
Gambar 1 menunjukkan contoh diagram Penggunaan CPU - Total.
Gambar 1. Diagram Penggunaan CPU - total di dasbor Monitoring di konsol Google Cloud .
Sekarang, bayangkan Anda menerima pemberitahuan dari Cloud Monitoring bahwa penggunaan CPU telah meningkat secara signifikan. Anda membuka dasbor Monitoring untuk instance di konsol Google Cloud dan memeriksa diagram CPU Utilization - Total di konsol Google Cloud . Seperti yang ditunjukkan pada Gambar 1, Anda dapat melihat peningkatan penggunaan CPU dari tugas pengguna dengan prioritas tinggi. Langkah berikutnya adalah mencari tahu operasi pengguna berprioritas tinggi yang menyebabkan peningkatan penggunaan CPU ini.
Anda dapat memvisualisasikan metrik ini dan metrik lainnya dalam deret waktu menggunakan dasbor Insight kueri. Dasbor bawaan ini membantu Anda melihat lonjakan penggunaan CPU dan mengidentifikasi kueri yang tidak efisien.
Mengidentifikasi operasi pengguna yang menyebabkan lonjakan pemakaian CPU
Diagram Penggunaan CPU - Total pada Gambar 1 menunjukkan bahwa tugas pengguna dengan prioritas tinggi adalah penyebab penggunaan CPU yang lebih tinggi.
Selanjutnya, Anda akan memeriksa diagram Penggunaan CPU menurut jenis operasi di konsolGoogle Cloud . Diagram ini menunjukkan pemakaian CPU yang dikelompokkan berdasarkan operasi yang dimulai pengguna dengan prioritas tinggi, sedang, dan rendah.
Apa yang dimaksud dengan operasi yang dimulai pengguna?
Operasi yang dimulai pengguna adalah operasi yang dimulai melalui permintaan API. Spanner mengelompokkan permintaan ini ke dalam jenis atau kategori operasi, dan Anda dapat menampilkan setiap jenis operasi sebagai garis pada diagram Penggunaan CPU menurut jenis operasi. Tabel berikut menjelaskan metode API yang disertakan dalam setiap jenis operasi.
| Operasi | Metode API | Deskripsi |
|---|---|---|
| read_readonly | Read StreamingRead |
Mencakup pembacaan yang mengambil baris dari database menggunakan pencarian dan pemindaian kunci. |
| read_readwrite | Read StreamingRead |
Mencakup pembacaan di dalam transaksi baca-tulis. |
| read_withpartitiontoken | Read StreamingRead |
Mencakup operasi baca yang dilakukan menggunakan serangkaian token partisi. |
| executesql_select_readonly | ExecuteSql ExecuteStreamingSql |
Mencakup pernyataan SQL Select eksekusi dan kueri aliran perubahan. |
| executesql_select_readwrite | ExecuteSql ExecuteStreamingSql |
Mencakup pernyataan Select eksekusi di dalam transaksi baca-tulis. |
| executesql_select_withpartitiontoken | ExecuteSql ExecuteStreamingSql |
Mencakup eksekusi pernyataan Select yang dilakukan menggunakan serangkaian token partisi. |
| executesql_dml_readwrite | ExecuteSql ExecuteStreamingSql ExecuteBatchDml |
Mencakup pernyataan SQL DML eksekusi. |
| executesql_dml_partitioned | ExecuteSql ExecuteStreamingSql ExecuteBatchDml |
Mencakup eksekusi pernyataan SQL DML Terpartisi. |
| beginorcommit | BeginTransaction Commit Rollback |
Mencakup transaksi mulai, commit, dan rollback. |
| Lain-lain | PartitionQuery PartitionRead GetSession CreateSession |
Mencakup PartitionQuery, PartitionRead, Create Database, Create Instance, operasi terkait sesi, operasi penayangan internal yang penting waktunya, dll. |
Berikut adalah contoh diagram metrik penggunaan CPU menurut jenis operasi.
Gambar 2. Diagram Penggunaan CPU menurut jenis operasi di konsol Google Cloud .
Anda dapat membatasi tampilan ke prioritas tertentu menggunakan menu Prioritas di bagian atas diagram. Diagram ini memetakan setiap jenis atau kategori operasi pada diagram garis. Kategori yang tercantum di bawah diagram mengidentifikasi setiap grafik. Anda dapat menyembunyikan dan menampilkan setiap grafik dengan memilih atau membatalkan pilihan filter kategori masing-masing.
Atau, Anda juga dapat membuat diagram ini di penjelajah metrik seperti yang dijelaskan di bawah:
Membuat diagram untuk pemakaian CPU menurut jenis operasi di Metrics Explorer
- Di konsol Google Cloud , pilih Monitoring, atau gunakan tombol berikut:
- Pilih Metrics Explorer di panel navigasi.
-
Di kolom Cari jenis resource dan metrik, masukkan nilai
spanner.googleapis.com/instance/cpu/utilization_by_operation_type, lalu pilih baris yang muncul di bawah kotak. -
Di kolom Filter, masukkan nilai
instance_id, lalu masukkan ID instance yang ingin Anda periksa dan klik >Terapkan. -
Di kolom Group By, pilih
categorydari menu drop-down. Diagram akan menampilkan penggunaan CPU tugas pengguna yang dikelompokkan berdasarkan jenis operasi, atau kategori.
Meskipun metrik Penggunaan CPU menurut prioritas di bagian sebelumnya membantu menentukan apakah tugas pengguna atau sistem menyebabkan peningkatan penggunaan sumber daya CPU, dengan metrik Penggunaan CPU menurut jenis operasi, Anda dapat mempelajari lebih dalam dan mengetahui jenis operasi yang dimulai pengguna di balik peningkatan penggunaan CPU ini.
Mengidentifikasi permintaan pengguna mana yang berkontribusi pada peningkatan penggunaan CPU
Untuk menentukan permintaan pengguna tertentu yang menyebabkan lonjakan penggunaan CPU dalam grafik jenis operasi executesql_select_readonly yang Anda lihat di Gambar 2, Anda akan menggunakan tabel statistik introspeksi bawaan untuk mendapatkan lebih banyak insight.
Gunakan tabel berikut sebagai panduan untuk menentukan tabel statistik yang akan dikueri berdasarkan jenis operasi yang menyebabkan penggunaan CPU tinggi.
| Jenis operasi | Kueri | Baca | Transaksi |
|---|---|---|---|
| read_readonly | Tidak | Ya | Tidak |
| read_readwrite | Tidak | Ya | Ya |
| read_withpartitiontoken | Tidak | Ya | Tidak |
| executesql_select_readonly | Ya | Tidak | Tidak |
| executesql_select_withpartitiontoken | Ya | Tidak | Tidak |
| executesql_select_readwrite | Ya | Tidak | Ya |
| executesql_dml_readwrite | Ya | Tidak | Ya |
| executesql_dml_partitioned | Tidak | Tidak | Ya |
| beginorcommit | Tidak | Tidak | Ya |
Misalnya, jika read_withpartitiontoken adalah masalahnya, pecahkan masalah menggunakan statistik baca.
Dalam skenario ini, operasi executesql_select_readonly tampaknya menjadi penyebab peningkatan penggunaan CPU yang Anda amati. Berdasarkan tabel di atas, Anda harus melihat statistik kueri berikutnya untuk mengetahui kueri mana yang mahal, sering dijalankan, atau memindai banyak data.
Untuk mengetahui kueri dengan penggunaan CPU tertinggi dalam satu jam sebelumnya, Anda dapat menjalankan kueri berikut pada tabel statistik query_stats_top_hour.
SELECT text,
execution_count AS count,
avg_latency_seconds AS latency,
avg_cpu_seconds AS cpu,
execution_count * avg_cpu_seconds AS total_cpu
FROM spanner_sys.query_stats_top_hour
WHERE interval_end =
(SELECT MAX(interval_end)
FROM spanner_sys.query_stats_top_hour)
ORDER BY total_cpu DESC;
Output akan menampilkan kueri yang diurutkan berdasarkan penggunaan CPU. Setelah mengidentifikasi kueri dengan penggunaan CPU tertinggi, Anda dapat mencoba opsi berikut untuk menyesuaikannya.
Tinjau rencana eksekusi kueri untuk mengidentifikasi kemungkinan inefisiensi yang dapat menyebabkan pemakaian CPU yang tinggi.
Tinjau kueri Anda untuk memastikan kueri tersebut mengikuti praktik terbaik SQL.
Tinjau desain skema database dan perbarui skema untuk memungkinkan kueri yang lebih efisien.
Tetapkan dasar untuk jumlah eksekusi kueri oleh Spanner selama interval. Dengan menggunakan dasar pengukuran ini, Anda akan dapat mendeteksi dan menyelidiki penyebab penyimpangan yang tidak terduga dari perilaku normal.
Jika Anda tidak berhasil menemukan kueri yang menggunakan banyak CPU, tambahkan kapasitas komputasi ke instance. Menambahkan kapasitas komputasi akan menyediakan lebih banyak resource CPU dan memungkinkan Spanner menangani workload yang lebih besar. Untuk mengetahui informasi selengkapnya, lihat Meningkatkan kapasitas komputasi.
Langkah berikutnya
Pelajari metrik pemakaian CPU.
Pelajari alat Introspeksi lainnya.
Pelajari Pemantauan dengan Cloud Monitoring.
Pelajari lebih lanjut praktik terbaik SQL untuk Spanner.
Lihat daftar Metrik dari Spanner.