重要なシステムテーブル
system.errors
system.replicas
system.replication_queue
system.merges
system.parts
本番環境でよくある問題
ディスク容量の問題
パーツが多すぎるエラー
- 30 秒または 200MB をしきい値としてデータをバッチ化する
- 自動バッチ化のために async_insert を有効にする
- サーバー側でバッチ化するために buffer table を使用する
- バッチサイズを制御できるように Kafka を設定する
無効なタイムスタンプに関する問題
ALTER 操作のリスク
ALTER 操作は、多くのリソースを消費し、場合によってはデータベースをロックしてしまうことがあります。コミュニティで共有されたある事例では、14TB のデータで Integer を Float に変更した結果、データベース全体がロックされ、バックアップから再構築する必要が生じました。
負荷の高いミューテーションを監視する:
メモリとパフォーマンス
外部集約
max_bytes_before_external_group_by を使用します。これは、大規模な GROUP BY 操作でメモリ不足によるクラッシュを防ぐのに役立ちます。この設定の詳細はこちらをご覧ください。
非同期 INSERT の詳細
分散テーブルの設定
insert_distributed_sync を有効にします。
分散テーブルを使用する際は、一時データの蓄積を監視してください。
パフォーマンス監視のしきい値
- パーティションあたりのパーツ数: できれば 100 未満
- 挿入遅延: 0 を維持すること
- 挿入レート: 最適なパフォーマンスのため、1 秒あたりおよそ 1 回までに抑える
クイックリファレンス
| 問題 | 検知 | 対処法 |
|---|---|---|
| ディスク容量 | system.parts の総バイト数を確認 | 使用量を監視し、スケーリングを計画する |
| パーツが多すぎる | テーブルごとのパーツ数を確認 | insert をバッチ化し、async_insert を有効にする |
| レプリケーションラグ | system.replicas の遅延を確認 | ネットワークを監視し、レプリカを再起動する |
| 不適切なデータ | パーティションの日付を検証する | タイムスタンプの検証を実装する |
| 進行しないミューテーション | system.mutations の状態を確認 | まず少量のデータでテストする |