Halaman ini menjelaskan masalah penggunaan disk tinggi yang diketahui dan menawarkan bantuan pemecahan masalah.
Masalah penggunaan disk tinggi yang diketahui mencakup hal berikut:
- Penggunaan file
Temporary_filesyang tinggi di MySQL 8.0 dan yang lebih baru. - Penggunaan file
Othersyang tinggi di MySQL 8.0 dan yang lebih lama.
Konsumsi file sementara dikategorikan dalam file tmp_data di versi sebelum MySQL 8.0.
Metrik perincian penyimpanan MySQL
Metrik utama yang digunakan untuk memantau penggunaan disk mendetail adalah cloudsql.googleapis.com/database/disk/bytes_used_by_data_type. Metrik ini memberikan perincian penggunaan disk instance per jenis data sebagai berikut:
| Jenis data | Definisi |
|---|---|
Binlog |
Penyimpanan yang digunakan oleh log biner MySQL, yang penting untuk pemulihan point-in-time dan replikasi. |
Cloudsql_mysql_audit_log |
Penyimpanan yang digunakan oleh log audit Cloud SQL MySQL. |
Data |
Mencakup tablespace InnoDB utama (file .ibd) dan tablespace sistem (ibdata1). |
General_log |
Penyimpanan yang digunakan oleh log kueri umum. |
General_tablespace |
Penyimpanan yang digunakan oleh tablespace sistem InnoDB, yang terdiri dari file ibdata*. |
Last_sys_tablespace |
Penyimpanan yang digunakan oleh tablespace terbaru. |
Others |
Mencakup file sistem internal. |
Redo_log |
Penyimpanan yang digunakan oleh log redo InnoDB yang digunakan untuk pemulihan dari error. |
Relaylog |
Penyimpanan yang digunakan oleh log relay pada instance replika selama replikasi. |
Slow_log |
Penyimpanan yang digunakan oleh log kueri lambat jika diaktifkan dan disimpan di disk. |
Temporary files |
Penyimpanan yang dilacak secara eksplisit untuk file sementara yang dibuat oleh MySQL. |
Temporary_space |
Penyimpanan yang digunakan oleh file sementara sistem operasi di direktori /tmp. |
Tmp_data |
Data sementara yang dibuat oleh MySQL selama operasi seperti pengurutan dan penggabungan. |
Undo_log |
Penyimpanan yang digunakan oleh log urungkan. |
Menemukan file dalam kategori Temporary_files dan Others
Kueri yang berjalan lama (seperti operasi JOIN, ORDER BY, atau GROUP BY yang kompleks) membuat file sementara berukuran besar di direktori MySQL.
Untuk instance MySQL yang menggunakan versi pemeliharaan yang dirilis mulai April 2026, file sementara ini dilaporkan secara eksplisit dalam kategori Temporary_files.
Pada versi sebelumnya, file sementara dilaporkan dalam kategori Others.
Memecahkan masalah penggunaan disk tinggi
Untuk memecahkan masalah penggunaan disk tinggi yang disebabkan oleh file sementara berukuran besar, ikuti langkah-langkah berikut:
- Identifikasi kueri yang berjalan lama dan aktif.
- Mitigasi langsung.
- Gunakan query insights.
- Lakukan analisis retrospektif.
- Optimalkan kueri.
- Siapkan pemantauan dan pemberitahuan.
Mengidentifikasi kueri yang berjalan lama dan aktif
Masalah penggunaan disk tinggi paling sering disebabkan oleh kueri yang berjalan lama (seperti operasi JOIN, ORDER BY, atau GROUP BY yang kompleks) yang membuat file sementara berukuran besar di direktori MySQL. File sementara ini dikategorikan dalam kategori Temporary_files atau Others.
Instance MySQL dengan versi pemeliharaan baru (versi r20260320.00_00 dan yang lebih baru) memiliki tabel INFORMATION_SCHEMA.CLOUDSQL_OPEN_TEMP_FILES yang menampilkan file sementara yang dibuat oleh kueri yang berjalan lama dan tidak ditautkan (yaitu, file ada, tetapi tidak ditautkan ke proses MySQL) oleh MySQL.
Gunakan kueri berikut untuk mendapatkan kueri yang berjalan lama dan aktif:
SELECT
otf.fd, otf.size, p.id, p.info, p.user
FROM
INFORMATION_SCHEMA.CLOUDSQL_OPEN_TEMP_FILES otf
LEFT JOIN
performance_schema.processlist p
ON
otf.SESSION_ID = p.ID;
Contoh output:
+----+------------+------+----------------------------------+------+
| fd | size | id | info | user |
+----+------------+------+----------------------------------+------+
| 39 | 1670750208 | 8 | select * from t1 order by rand() | root |
| 40 | 1670750208 | 8 | select * from t1 order by rand() | root |
+----+------------+------+----------------------------------+------+
2 rows in set (0.00 sec)
Untuk instance dengan versi pemeliharaan r20260320.00_00 dan yang lebih lama, gunakan kueri berikut untuk mendapatkan kueri yang berjalan lama dan aktif:
SHOW FULL PROCESSLIST;
Dalam output, cari operasi yang biasanya menggunakan file sementara disk:
- Operasi
JOINyang besar, terutama tanpa indeks yang tepat. - Operasi
ORDER BYatauGROUP BYyang kompleks pada set hasil yang besar. - Operasi
ALTER TABLEyang besar.
Mitigasi langsung
Jika kueri yang sedang berjalan diidentifikasi sebagai sumber konsumsi disk dari penyelidikan, Anda dapat mengakhirinya untuk melepaskan ruang file sementara terkait.
Untuk mengakhiri kueri, jalankan perintah berikut:
KILL PROCESS_ID;
Ganti PROCESS_ID dengan ID proses kueri:
Untuk versi pemeliharaan
r20260320atau yang lebih baru, Anda dapat mengambil nilai PROCESS_ID melalui kolom SESSION_ID dari tabelINFORMATION_SCHEMA.CLOUDSQL_OPEN_TEMP_FILES.Untuk versi sebelumnya (versi
r20260117atau yang lebih lama) , Anda dapat mengambil nilai PROCESS_ID dari output operasiSHOW FULL PROCESSLIST.
Setelah penghentian kueri yang bertanggung jawab atas peningkatan konsumsi disk melalui file sementara, mungkin diperlukan waktu hingga sekitar 5 menit agar perubahan ini terdaftar dalam metrik penggunaan disk.
Menggunakan query insights
Sebaiknya gunakan query insights untuk mengidentifikasi dan menyempurnakan kueri yang berperforma lambat.
Untuk mengetahui informasi selengkapnya, lihat Menggunakan query insights untuk meningkatkan performa kueri.
Melakukan analisis retrospektif
Setelah lonjakan penggunaan mereda, Anda dapat menganalisis data historis untuk mengidentifikasi penyebabnya menggunakan hal berikut:
Query insights. Periksa kueri yang mungkin telah membuat file sementara berukuran besar. Periksa kueri yang tercantum berdasarkan ringkasan kueri (termasuk metrik seperti waktu eksekusi rata-rata, jumlah kueri, dan rata-rata baris yang dipindai dan ditampilkan).
Slow_log. AktifkanSlow_logdan tetapkanlong_query_timeke nilai minimum yang sesuai. Log ini mengambil kueri yang berjalan lama untuk analisis dan pengoptimalan.General_log. PeriksaGeneral_log(jika diaktifkan) untuk kueri yang dicatat selama periode insiden yang memiliki operasiJOINatauSORTyang mungkin telah menghasilkan file sementara berukuran besar. Jika tidak, Anda dapat mengaktifkanGeneral_logdan mengambil kueri dalam peristiwa berikutnya.Metrik Cloud Monitoring. Tinjau metrik berikut:
cloudsql.googleapis.com/database/mysql/tmp_disk_tables_created_count: melacak jumlah tabel sementara yang dibuat di disk yang sering menjadi penyebab file besar yang tidak ditautkan.cloudsql.googleapis.com/database/mysql/handler_operations_count: melacak peningkatan jumlah operasi pada waktu tersebut.cloudsql.googleapis.com/database/mysql/innodb/active_trx_total_time: melacak transaksi yang aktif untuk jangka waktu yang lebih lama.
Peningkatan metrik ini yang bertepatan dengan lonjakan penggunaan disk menunjukkan bahwa kueri yang menghasilkan tabel sementara berukuran besar adalah akar masalahnya.
Histori transaksi. Tinjau metrik berikut:
cloudsql.googleapis.com/database/mysql/innodb/history_list_length metric: panjang daftar histori yang tinggi dapat disebabkan oleh transaksi yang berjalan lama yang memblokir penghapusan log urungkan, yang juga dapat berkontribusi pada masalah penggunaan disk.cloudsql.googleapis.com/database/mysql/innodb/active_trx_longest_time: transaksi yang berjalan lama selama periode penggunaan disk yang tinggi.
Mengoptimalkan kueri
Setelah analisis log menunjukkan kueri tertentu yang menyebabkan lonjakan metrik, Anda dapat mengoptimalkan atau menulis ulang kueri tersebut untuk meminimalkan pembuatan file sementara yang ekstensif.
Untuk mengoptimalkan kueri, Anda dapat melakukan hal berikut:
- Tambahkan indeks yang sesuai.
- Refaktor gabungan kompleks atau operasi pengurutan.
Untuk mengetahui informasi selengkapnya, lihat Penyesuaian kueri.
Menyiapkan pemantauan dan pemberitahuan
Untuk mencegah insiden di masa mendatang yang disebabkan oleh penggunaan disk yang tidak terkontrol, terutama karena file sementara yang dihasilkan dari kueri yang berjalan lama, terapkan pemantauan dan pemberitahuan proaktif menggunakan Monitoring.
Anda dapat membuat pemberitahuan untuk metrik yang menunjukkan konsumsi resource yang tinggi atau pola kueri yang diketahui menghasilkan file sementara berukuran besar.
| Nama metrik | Deskripsi | Nilai minimum pemberitahuan yang direkomendasikan |
|---|---|---|
cloudsql.googleapis.com/database/disk/utilization |
Persentase ruang disk yang dialokasikan dan digunakan.
Metrik ini memantau penggunaan kapasitas disk secara keseluruhan. |
> 80% (Dipertahankan selama 5 menit) |
cloudsql.googleapis.com/database/disk/bytes_used |
Total byte ruang disk yang digunakan oleh instance database.
Metrik ini melacak pertumbuhan konsumsi disk absolut. |
Pantau terhadap metrik database/disk/quota. |
Untuk mempelajari cara menyiapkan pemberitahuan dan pemantauan untuk metrik Cloud SQL, lihat Ringkasan pemberitahuan dan Memantau instance Cloud SQL.