テーブルサイズの統計

Spanner には、次の組み込みテーブルが用意されています。

  • SPANNER_SYS.TABLE_SIZES_STATS_1HOUR: データベース内のテーブルとインデックスのサイズが格納されます。
  • SPANNER_SYS.TABLE_SIZES_STATS_PER_LOCALITY_GROUP_1HOUR: ローカリティ グループごとに、データベース内のテーブルとインデックスのサイズが格納されます。

テーブルサイズはバイト単位です。テーブルサイズにはデータ バージョンが含まれます。これらの組み込みテーブルを使用して、テーブルとインデックスのサイズの経時的な変化をモニタリングできます。インデックスの作成と削除、インデックスの変更(インデックスに行を挿入するときや、新しい列を追加するとき)を行うときにも、インデックスのサイズをモニタリングできます。さらに、変更ストリーム テーブルのサイズも確認できます。

データベース ストレージは、データベース ストレージ指標の合計でモニタリングできます。SPANNER_SYS.TABLE_SIZES_STATS_1HOURSPANNER_SYS.TABLE_SIZES_STATS_PER_LOCALITY_GROUP_1HOUR を使用して、データベース ストレージの内訳を確認できます。

テーブルサイズの統計情報にアクセスする

Spanner は、SPANNER_SYS スキーマにテーブルサイズの統計情報を提供します。SPANNER_SYS データにアクセスするには、次の方法を使用できます。

  • Google Cloud コンソール(データベースの Spanner Studio ページ)

  • gcloud spanner databases execute-sql コマンド。

  • executeSql メソッドまたは executeStreamingSql メソッド。

Spanner が提供する次の単一読み取りメソッドは、SPANNER_SYS をサポートしていません。

  • 強力な読み取りを実行してテーブルから単一行または複数行を読み取る。
  • ステイル読み取りを実行してテーブルから単一行または複数行を読み取る。
  • セカンダリ インデックスから単一行または複数行を読み取る。

TABLE_SIZES_STATS_1HOUR

SPANNER_SYS.TABLE_SIZES_STATS_1HOUR には、データベース内のすべてのテーブルのサイズが interval_end で並べ替えられて格納されます。間隔は時計の時刻に基づいており、正時に終了します。内部的には、5 分ごとに Spanner がすべてのサーバーからデータを収集し、その後すぐに TABLE_SIZES_STATS_1HOUR テーブルでデータを利用できるようにします。その後、データは 1 時間ごとに平均化されます。たとえば、午前 11 時 59 分 30 秒の場合、TABLE_SIZES_STATS_1HOUR には午前 10 時 00 分 00 秒から午前 10 時 59 分 59 秒までの平均テーブルサイズが表示されます。

テーブル スキーマ

列名 説明
INTERVAL_END TIMESTAMP テーブルサイズの収集間隔の終了時刻。
TABLE_NAME STRING テーブルまたはインデックスの名前。
USED_BYTES FLOAT64 テーブルサイズ(バイト単位)。
USED_SSD_BYTES FLOAT64 テーブルで使用される SSD ストレージ(バイト単位)。
USED_HDD_BYTES FLOAT64 テーブルで使用される HDD ストレージ(バイト単位)。

クエリの例

このセクションでは、テーブルサイズの統計情報の集計を取得する SQL ステートメントの例をいくつか紹介します。これらの SQL ステートメントは、クライアント ライブラリgcloud spanner、または Google Cloud コンソールを使用して実行できます。

最新の間隔で上位 4 つのテーブルとインデックスをクエリする

次のクエリは、最新の間隔で上位 4 つのテーブルとインデックスを返します。

    SELECT interval_end,
          table_name,
          used_bytes
    FROM spanner_sys.table_sizes_stats_1hour
    WHERE interval_end = (
          SELECT MAX(interval_end)
          FROM spanner_sys.table_sizes_stats_1hour)
    ORDER BY used_bytes DESC
    LIMIT 4;
  

クエリ出力
interval_end table_name used_bytes
2022-11-15 13:00:00-07:00 order_item 60495552
2022-11-15 13:00:00-07:00 orders 13350000
2022-11-15 13:00:00-07:00 item_inventory 2094549
2022-11-15 13:00:00-07:00 customer 870000

過去 24 時間の特定のテーブルまたはインデックスのクエリサイズの傾向

次のクエリは、過去 24 時間のテーブルのサイズを返します。

GoogleSQL

SELECT interval_end, used_bytes
  FROM spanner_sys.table_sizes_stats_1hour
WHERE interval_end > TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL -24 HOUR)
  AND table_name = "table_name"
ORDER BY interval_end DESC;

ここで

  • table_name は、データベース内の既存のテーブルまたはインデックスである必要があります。

PostgreSQL

SELECT interval_end, used_bytes
  FROM spanner_sys.table_sizes_stats_1hour
WHERE interval_end > spanner.timestamptz_subtract(now(), '24 HOUR')
  AND table_name = 'table_name'
ORDER BY interval_end DESC;

ここで

  • table_name は、データベース内の既存のテーブルまたはインデックスである必要があります。
クエリ出力
interval_end used_bytes
2022-11-15 13:00:00-07:00 13350000
2022-11-15 12:00:00-07:00 13350000
2022-11-15 11:00:00-07:00 13350000
2022-11-15 10:00:00-07:00 13350000
2022-11-15 09:00:00-07:00 13350000
2022-11-15 08:00:00-07:00 12350000
2022-11-15 07:00:00-07:00 12350000
2022-11-15 06:00:00-07:00 12350000
2022-11-15 05:00:00-07:00 11350000
2022-11-15 04:00:00-07:00 11350000
2022-11-15 03:00:00-07:00 11350000
2022-11-15 02:00:00-07:00 11350000
2022-11-15 01:00:00-07:00 11350000
2022-11-15 00:00:00-07:00 10350000
2022-11-14 23:00:00-07:00 10350000
2022-11-14 22:00:00-07:00 10350000
2022-11-14 21:00:00-07:00 10350000
2022-11-14 20:00:00-07:00 10350000
2022-11-14 19:00:00-07:00 10350000
2022-11-14 18:00:00-07:00 10350000
2022-11-14 17:00:00-07:00 10350000
2022-11-14 16:00:00-07:00 10350000
2022-11-14 15:00:00-07:00 10350000
2022-11-14 14:00:00-07:00 10350000
2022-11-14 13:00:00-07:00 10350000

TABLE_SIZES_STATS_PER_LOCALITY_GROUP_1HOUR

SPANNER_SYS.TABLE_SIZES_STATS_PER_LOCALITY_GROUP_1HOUR には、ローカリティ グループごとに、interval_end で並べ替えられたデータベース内のすべてのテーブルのサイズが格納されます。間隔は時計の時刻に基づいており、正時に終了します。内部的には、5 分ごとに Spanner がすべてのサーバーからデータを収集し、その後すぐに TABLE_SIZES_STATS_PER_LOCALITY_GROUP_1HOUR テーブルでデータを利用できるようにします。その後、データは 1 時間ごとに平均化されます。たとえば、午前 11 時 59 分 30 秒に、TABLE_SIZES_STATS_PER_LOCALITY_GROUP_1HOUR で午前 10 時 00 分 00 秒から午前 10 時 59 分 59 秒までの各ローカリティ グループの平均テーブルサイズが示されます。

テーブル スキーマ

列名 説明
INTERVAL_END TIMESTAMP テーブルサイズの収集間隔の終了時刻。
TABLE_NAME STRING テーブルまたはインデックスの名前。
LOCALITY_GROUP STRING ローカリティ グループの名前。
USED_BYTES FLOAT64 テーブルサイズ(バイト単位)。
USED_SSD_BYTES FLOAT64 テーブルで使用される SSD ストレージ(バイト単位)。
USED_HDD_BYTES FLOAT64 テーブルで使用される HDD ストレージ(バイト単位)。

データの保持

Spanner は、少なくとも過去 30 日間の間隔で SPANNER_SYS.TABLE_SIZES_STATS_1HOUR のデータを保持します。

次のステップ