Statistik operasi kolom

Spanner menyediakan tabel bawaan yang mencatat statistik operasi baca, kueri, dan tulis untuk kolom tabel Anda. Dengan statistik operasi kolom, Anda dapat melakukan hal berikut:

  • Identifikasi kolom dengan traffic baca, kueri, dan tulis yang tidak terduga.

  • Identifikasi kolom yang sering digunakan.

Saat Anda membuat kueri atau menulis ke kolom, Spanner akan menaikkan jumlah operasi yang sesuai untuk kolom tersebut sebanyak satu, terlepas dari jumlah baris yang diakses.

Anda dapat memantau keseluruhan database menggunakan metrik yang mengukur operasi per detik, operasi per detik menurut metode API, dan metrik terkait lainnya dalam diagram System Insights.

Mengakses statistik operasi kolom

Spanner menyediakan statistik operasi kolom dalam skema SPANNER_SYS. Anda dapat menggunakan cara berikut untuk mengakses data SPANNER_SYS:

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.

Untuk mengetahui informasi selengkapnya, lihat Metode bacaan tunggal.

Statistik operasi kolom

Tabel berikut melacak statistik baca, kueri, dan tulis pada kolom Anda selama jangka waktu tertentu:

  • SPANNER_SYS.COLUMN_OPERATIONS_STATS_MINUTE: Operasi selama interval 1 menit
  • SPANNER_SYS.COLUMN_OPERATIONS_STATS_10MINUTE: Operasi selama interval 10 menit
  • SPANNER_SYS.COLUMN_OPERATIONS_STATS_HOUR: Operasi selama interval 1 jam

Tabel ini memiliki properti berikut:

  • Setiap tabel berisi data untuk interval waktu yang tidak tumpang-tindih dengan panjang yang ditentukan oleh nama tabel.

  • Interval 1 menit dimulai pada menit ke-0, interval 10 menit dimulai setiap 10 menit, dimulai pada jam ke-0, dan interval 1 jam dimulai pada jam ke-0.

    Misalnya, pada pukul 11.59.30, kueri SQL dapat mengakses interval terbaru berikut:

    • 1 menit: 11.58.00–11.58.59 AM
    • 10 menit: 11.40.00–11.49.59 AM
    • 1 jam: 10.00.00–10.59.59

Skema untuk semua tabel statistik operasi kolom

Nama kolom Jenis Deskripsi
INTERVAL_END TIMESTAMP Akhir interval waktu saat statistik penggunaan kolom dikumpulkan.
TABLE_NAME STRING Nama tabel atau indeks.
COLUMN_NAME STRING Nama kolom.
READ_COUNT INT64 Jumlah pembacaan dari kolom.
QUERY_COUNT INT64 Jumlah kueri yang membaca dari kolom.
WRITE_COUNT INT64 Jumlah kueri yang menulis ke tabel.
IS_QUERY_CACHE_MEMORY_CAPPED BOOL Apakah pengumpulan statistik dibatasi karena tekanan memori.

Jika Anda memasukkan data ke database menggunakan mutasi, Spanner akan menaikkan WRITE_COUNT sebesar 1 untuk setiap tabel yang diakses oleh pernyataan penyisipan. Selain itu, kueri yang mengakses indeks tanpa memindai tabel pokok hanya akan menaikkan QUERY_COUNT pada indeks.

Retensi data

Setidaknya, Spanner menyimpan data untuk setiap tabel selama periode waktu berikut:

  • SPANNER_SYS.COLUMN_OPERATIONS_STATS_MINUTE: Interval yang mencakup enam jam sebelumnya.

  • SPANNER_SYS.COLUMN_OPERATIONS_STATS_10MINUTE: Interval yang mencakup empat hari sebelumnya.

  • SPANNER_SYS.COLUMN_OPERATIONS_STATS_HOUR: Interval yang mencakup 30 hari sebelumnya.

Contoh kueri

Bagian ini mencakup beberapa contoh pernyataan SQL yang mengambil statistik operasi kolom gabungan. Anda dapat menjalankan pernyataan SQL ini menggunakan library klien atau Google Cloud CLI.

Membuat kueri kolom tabel dengan operasi tulis terbanyak untuk interval terbaru

GoogleSQL

    SELECT interval_end,
          table_name,
          column_name,
          write_count
    FROM spanner_sys.column_operations_stats_minute
    WHERE interval_end = (
          SELECT MAX(interval_end)
          FROM spanner_sys.column_operations_stats_minute)
    ORDER BY write_count DESC;

PostgreSQL

    SELECT interval_end,
          table_name,
          column_name,
          write_count
    FROM spanner_sys.column_operations_stats_minute
    WHERE interval_end = (
          SELECT MAX(interval_end)
          FROM spanner_sys.column_operations_stats_minute)
    ORDER BY write_count DESC;

Membuat kueri kolom dengan operasi kueri terbanyak untuk interval terbaru

GoogleSQL

    SELECT interval_end,
          table_name,
          column_name,
          query_count
    FROM spanner_sys.column_operations_stats_minute
    WHERE interval_end = (
          SELECT MAX(interval_end)
          FROM spanner_sys.column_operations_stats_minute)
    ORDER BY query_count DESC;

PostgreSQL

    SELECT interval_end,
          table_name,
          column_name,
          query_count
    FROM spanner_sys.column_operations_stats_minute
    WHERE interval_end = (
          SELECT MAX(interval_end)
          FROM spanner_sys.column_operations_stats_minute)
    ORDER BY query_count DESC;

Mengirim kueri penggunaan kolom selama 6 jam terakhir

GoogleSQL

    SELECT interval_end,
          read_count,
          query_count,
          write_count
    FROM spanner_sys.column_operations_stats_minute
    WHERE table_name = "table_name"
          AND column_name = "column_name"
    ORDER BY interval_end DESC;
    

Dengan:

  • table_name harus berupa tabel atau indeks yang ada dalam database.
  • column_name harus berupa kolom yang ada di tabel.

PostgreSQL

    SELECT interval_end,
          read_count,
          query_count,
          write_count
    FROM spanner_sys.column_operations_stats_minute
    WHERE table_name = 'table_name'
          AND column_name = 'column_name'
    ORDER BY interval_end DESC;
    

Dengan:

  • table_name harus berupa tabel atau indeks yang ada dalam database.
  • column_name harus berupa kolom yang ada di tabel.

Mengirim kueri penggunaan kolom selama 14 hari terakhir

GoogleSQL

SELECT interval_end,
       read_count,
       query_count,
       write_count
FROM spanner_sys.column_operations_stats_hour
WHERE interval_end > TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL -14 DAY)
      AND table_name = "table_name"
      AND column_name = "column_name"
ORDER BY interval_end DESC;

Lakukan penggantian berikut:

  • table_name: nama tabel atau indeks dalam database.
  • column_name: nama kolom dalam tabel.

PostgreSQL

SELECT interval_end,
   read_count,
   query_count,
   write_count
FROM spanner_sys.column_operations_stats_hour
WHERE interval_end > spanner.timestamptz_subtract(now(), '14 DAY')
  AND table_name = 'table_name'
  AND column_name = 'column_name'
ORDER BY interval_end DESC;

Lakukan penggantian berikut:

  • table_name: nama tabel atau indeks dalam database.
  • column_name: nama kolom dalam tabel.

Langkah berikutnya