Menyelidiki pemakaian CPU yang tinggi

Halaman ini menjelaskan cara menggunakan diagram dan metrik penggunaan CPU, beserta alat introspeksi lainnya, untuk menyelidiki penggunaan CPU yang tinggi di database Anda.

Mengidentifikasi apakah tugas sistem atau pengguna menyebabkan penggunaan CPU yang tinggi

Konsol Google Cloud menyediakan beberapa alat pemantauan untuk Spanner, yang memungkinkan Anda melihat status metrik yang paling penting untuk instance Anda. Salah satunya adalah diagram yang disebut CPU utilization - Total. Diagram ini menunjukkan total penggunaan CPU, sebagai persentase dari resource CPU instance, yang dibagi menurut prioritas tugas dan jenis operasi. Ada dua jenis tugas: tugas pengguna, seperti operasi baca dan tulis, dan tugas sistem, yang mencakup tugas latar belakang otomatis seperti pemadatan dan pengisian ulang indeks.

Gambar 1 menunjukkan contoh diagram CPU utilization - Total.

Contoh diagram Total pemakaian CPU

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 Pemantauan untuk instance di konsol Google Cloud dan memeriksa diagram Penggunaan CPU - Total di konsol 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.

Identifikasi operasi pengguna yang menyebabkan lonjakan penggunaan CPU

Diagram CPU utilization - Total di 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 Cloud Console. Diagram ini menunjukkan penggunaan CPU yang dikelompokkan menurut 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 berdasarkan jenis operasi. Tabel berikut menjelaskan metode API yang disertakan dalam setiap jenis operasi.

Operasi Metode API Deskripsi
read_readonly Baca
StreamingRead
Mencakup operasi baca yang mengambil baris dari database menggunakan pencarian dan pemindaian kunci.
read_readwrite Baca
StreamingRead
Mencakup pembacaan di dalam transaksi baca-tulis.
read_withpartitiontoken Baca
StreamingRead
Mencakup operasi baca yang dilakukan menggunakan kumpulan token partisi.
executesql_select_readonly ExecuteSql
ExecuteStreamingSql
Mencakup mengeksekusi pernyataan SQL Select dan mengubah kueri aliran data.
executesql_select_readwrite ExecuteSql
ExecuteStreamingSql
Menyertakan pernyataan Select yang dieksekusi di dalam transaksi baca-tulis.
executesql_select_withpartitiontoken ExecuteSql
ExecuteStreamingSql
Menyertakan pernyataan Select yang dieksekusi yang dilakukan menggunakan kumpulan token partisi.
executesql_dml_readwrite ExecuteSql
ExecuteStreamingSql
ExecuteBatchDml
Mencakup menjalankan pernyataan SQL DML.
executesql_dml_partitioned ExecuteSql
ExecuteStreamingSql
ExecuteBatchDml
Mencakup menjalankan pernyataan SQL DML Terpartisi.
beginorcommit BeginTransaction
Commit
Rollback
Mencakup transaksi mulai, commit, dan rollback.
misc PartitionQuery
PartitionRead
GetSession
CreateSession
Mencakup PartitionQuery, PartitionRead, Create Database, Create Instance, operasi terkait sesi, operasi penayangan internal yang sangat penting, dll.

Berikut adalah contoh diagram metrik pemakaian CPU menurut jenis operasi.

Contoh grafik penggunaan CPU menurut jenis operasi

Gambar 2. Diagram Penggunaan CPU menurut jenis operasi di konsol Google Cloud.

Anda dapat membatasi tampilan ke prioritas tertentu dengan menggunakan menu Prioritas di bagian atas diagram. Diagram 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:

Membuat diagram untuk penggunaan CPU menurut 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 >Terapkan.
  5. Di kolom Group By, pilih category dari menu drop-down. Diagram akan menampilkan penggunaan CPU tugas pengguna yang dikelompokkan menurut jenis operasi, atau kategori.

Meskipun metrik CPU utilization by priority di bagian sebelumnya membantu menentukan apakah tugas pengguna atau sistem menyebabkan peningkatan penggunaan resource CPU, dengan metrik CPU utilization by operation type, 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 di Gambar 2, Anda akan menggunakan tabel statistik introspeksi bawaan untuk mendapatkan insight lebih lanjut.

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 masalahnya 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 mana yang mahal, sering berjalan, atau memindai banyak data.

Untuk mengetahui kueri dengan penggunaan CPU tertinggi dalam satu jam sebelumnya, Anda dapat menjalankan kueri berikut di 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 berkontribusi pada penggunaan CPU yang tinggi.

  • Tinjau kueri Anda untuk memastikannya mengikuti praktik terbaik SQL.

  • Tinjau desain skema database dan perbarui skema untuk memungkinkan kueri yang lebih efisien.

  • Tetapkan dasar pengukuran untuk frekuensi Spanner mengeksekusi 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 intensif CPU, tambahkan kapasitas komputasi ke instance. Menambahkan kapasitas komputasi akan menyediakan lebih banyak resource CPU dan memungkinkan Spanner menangani beban kerja yang lebih besar. Untuk informasi selengkapnya, lihat Meningkatkan kapasitas komputasi.

Langkah selanjutnya