Menyelidiki pemakaian CPU yang tinggi

Halaman ini menjelaskan cara menggunakan metrik dan diagram pemakaian CPU, beserta alat introspeksi lainnya, untuk menyelidiki tingginya penggunaan CPU dalam database Anda.

Identifikasi apakah tugas pengguna atau sistem menyebabkan penggunaan CPU yang tinggi

Konsol Google Cloud menyediakan beberapa alat pemantauan untuk Spanner, sehingga Anda dapat melihat status metrik yang paling penting untuk instance Anda. Salah satunya adalah diagram yang disebut CPU utilization - Total. Diagram ini menunjukkan total pemakaian CPU, sebagai persentase resource CPU instance, yang dikelompokkan berdasarkan prioritas tugas dan jenis operasi. Ada dua jenis tugas: tugas pengguna, seperti membaca dan menulis, dan tugas sistem, yang mencakup tugas latar belakang otomatis seperti pemadatan dan pengisian ulang indeks.

Gambar 1 menunjukkan contoh diagram Pemakaian CPU - Total.

Contoh pemakaian CPU - Total chart

Gambar 1. Diagram CPU utilization - total di dasbor Monitoring di Konsol Google Cloud.

Sekarang, bayangkan Anda menerima pemberitahuan dari Cloud Monitoring bahwa penggunaan CPU telah meningkat secara signifikan. Buka dasbor Monitoring untuk instance Anda di Google Cloud Console dan periksa diagram CPU Utilization - Total di Cloud Console. Seperti ditunjukkan pada Gambar 1, Anda dapat melihat peningkatan pemakaian CPU dari tugas pengguna prioritas tinggi. Langkah selanjutnya adalah mencari tahu operasi pengguna berprioritas tinggi yang menyebabkan peningkatan penggunaan CPU ini.

Anda dapat memvisualisasikan metrik ini dan metrik lainnya pada deret waktu menggunakan dasbor Query insights. Dasbor bawaan ini membantu Anda melihat lonjakan penggunaan CPU dan mengidentifikasi kueri yang tidak efisien.

Mengidentifikasi operasi pengguna yang menyebabkan lonjakan penggunaan CPU

Diagram CPU utilization - Total pada Gambar 1 menunjukkan bahwa tugas pengguna berprioritas tinggi merupakan penyebab penggunaan CPU yang lebih tinggi.

Selanjutnya, Anda akan memeriksa diagram Pemakaian CPU menurut jenis operasi di Cloud Console. Diagram ini menunjukkan pemakaian CPU yang dikelompokkan berdasarkan operasi yang dimulai oleh pengguna dengan prioritas tinggi, sedang, dan rendah.

Apa yang dimaksud dengan operasi yang dimulai oleh pengguna?

Operasi yang dimulai oleh 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 baris pada diagram penggunaan CPU menurut jenis operasi. Tabel berikut menjelaskan metode API yang disertakan dalam setiap jenis operasi.

Operasi Metode API Deskripsi
read_readonly Baca
StreamingRead
Mencakup pembacaan yang mengambil baris dari database menggunakan pencarian dan pemindaian kunci.
read_readwrite Baca
StreamingRead
Menyertakan operasi baca di dalam transaksi baca-tulis.
read_withpartitiontoken Baca
StreamingRead
Mencakup operasi baca yang dilakukan menggunakan satu set token partisi.
executesql_select_readonly ExecuteSql
ExecuteStreamingSql
Mencakup eksekusi pernyataan SQL Select dan mengubah kueri aliran data.
executesql_select_readwrite ExecuteSql
ExecuteStreamingSql
Menyertakan pernyataan Select eksekusi di dalam transaksi baca-tulis.
executesql_select_withpartitiontoken ExecuteSql
ExecuteStreamingSql
Menyertakan pernyataan Select eksekusi yang dijalankan menggunakan serangkaian token partisi.
executesql_dml_readwrite ExecuteSql
ExecuteStreamingSql
ExecuteBatchDml
Termasuk pernyataan SQL DML eksekusi.
executesql_dml_partitioned ExecuteSql
ExecuteStreamingSql
ExecuteBatchDml
Termasuk pernyataan SQL DML Terpartisi yang dieksekusi.
beginorcommit MulaiTransaksi
Commit
Rollback
Termasuk transaksi mulai, commit, dan rollback.
lain-lain PartitionQuery
PartitionRead
GetSession
CreateSession
Mencakup PartitionQuery, PartitionRead, Membuat Database, Membuat Instance, operasi terkait sesi, operasi layanan internal yang penting waktu, dll.

Berikut adalah contoh diagram metrik Pemakaian CPU menurut jenis operasi.

Contoh diagram pemakaian CPU berdasarkan jenis operasi

Gambar 2. Diagram CPU utilization by operations type di Konsol Google Cloud.

Anda dapat membatasi tampilan ke prioritas tertentu menggunakan menu Priority di bagian atas diagram. Pola ini memetakan setiap jenis atau kategori operasi pada grafik garis. Kategori yang tercantum di bawah diagram mengidentifikasi setiap grafik. Anda dapat menyembunyikan dan menampilkan setiap grafik dengan memilih atau membatalkan pilihan filter kategorinya masing-masing.

Atau, Anda juga dapat membuat diagram ini di Metrics Explorer seperti yang dijelaskan di bawah:

Buat diagram untuk pemakaian CPU berdasarkan jenis operasi di Metrics Explorer

  1. Di konsol Google Cloud, pilih Monitoring, atau gunakan tombol berikut:

    Buka Monitoring

  2. Pilih Metrics Explorer di panel navigasi.
  3. Di kolom Find resource type and metric, masukkan nilai spanner.googleapis.com/instance/cpu/utilization_by_operation_type , lalu pilih baris yang muncul di bawah kotak.
  4. Di kolom Filter, masukkan nilai instance_id, lalu masukkan ID instance yang ingin Anda periksa dan klik >Apply.
  5. Di kolom Group By, pilih category dari daftar dropdown. Diagram akan menunjukkan penggunaan CPU atas tugas pengguna yang dikelompokkan berdasarkan jenis operasi, atau kategori.

Meskipun metrik penggunaan CPU berdasarkan prioritas di bagian sebelumnya membantu menentukan apakah tugas pengguna atau sistem menyebabkan peningkatan penggunaan resource CPU, dengan metrik pemakaian CPU berdasarkan jenis operasi Anda dapat menggali lebih dalam dan mencari tahu jenis operasi yang dimulai pengguna di balik peningkatan penggunaan CPU ini.

Mengidentifikasi permintaan pengguna yang berkontribusi pada peningkatan penggunaan CPU

Untuk menentukan permintaan pengguna tertentu yang bertanggung jawab atas lonjakan penggunaan CPU dalam grafik jenis operasi executesql_select_readonly yang Anda lihat dalam Gambar 2, Anda akan menggunakan tabel statistik introspeksi bawaan untuk mendapatkan lebih banyak data.

Gunakan tabel berikut sebagai panduan untuk menentukan tabel statistik yang akan dikueri berdasarkan jenis operasi yang menyebabkan penggunaan CPU yang tinggi.

Jenis operasi Mengkueri Melihat 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 masalahnya adalah read_withpartitiontoken, pecahkan masalah menggunakan statistik baca.

Dalam skenario ini, operasi executesql_select_readonly tampaknya menjadi alasan peningkatan penggunaan CPU yang Anda amati. Berdasarkan tabel sebelumnya, Anda harus melihat statistik kueri berikutnya untuk mengetahui kueri yang mahal, sering dijalankan, atau memindai banyak data.

Untuk mengetahui kueri dengan penggunaan CPU tertinggi pada 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;

Outputnya 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 berkontribusi pada penggunaan CPU yang tinggi.

  • Tinjau kueri Anda untuk memastikannya mengikuti praktik terbaik SQL.

  • Tinjau desain skema database dan perbarui skema agar kueri dapat lebih efisien.

  • Tetapkan dasar pengukuran untuk frekuensi Spanner menjalankan kueri selama interval. Dengan menggunakan dasar pengukuran ini, Anda dapat mendeteksi dan menyelidiki penyebab penyimpangan yang tidak terduga dari perilaku normal.

Jika Anda tidak berhasil menemukan kueri yang menggunakan CPU secara intensif, tambahkan kapasitas komputasi ke instance. Menambahkan kapasitas komputasi akan menyediakan lebih banyak resource CPU dan memungkinkan Spanner menangani beban kerja yang lebih besar. Untuk mengetahui informasi selengkapnya, lihat Meningkatkan kapasitas komputasi.

Langkah selanjutnya