MySQL は『書き込み中心』に強い堅実な選択肢
PostgreSQL と並ぶ主要 RDBMS の MySQL は、書き込み性能や運用簡素化で多くの企業に採用されています。本記事では編集部の視点で、本番運用の要点を公開情報をもとに整理します。PostgreSQL 実践 もご参考に。
InnoDB の特徴
(1) ACID 準拠:トランザクション保証。(2) クラスタインデックス:主キー = 物理順序。(3) 行ロック:高並行性。(4) 外部キー:参照整合性。(5) バッファプール:メモリ管理の主役。
主要設定パラメータ
(1) innodb_buffer_pool_size:物理メモリの70%。(2) innodb_log_file_size:1GB〜4GB。(3) innodb_flush_log_at_trx_commit:1=安全、2=高速。(4) max_connections:プール含めて見積もり。(5) query_cache:MySQL 8で削除済み。
レプリケーション
(1) 非同期レプリケーション:標準・遅延あり。(2) 半同期レプリケーション:1つ以上の slave 確認。(3) GTID:トポロジ変更容易。(4) レプリ遅延の監視:Seconds_Behind_Master。(5) クロス DC:DR 用。バックアップ&DR もご参考に。
パーティショニング
(1) RANGE:日付/IDで分割。(2) HASH:均等分散。(3) LIST:離散値で分割。(4) パーティション pruning:不要パーティション省略。(5) 制限:PostgreSQL に劣る面あり。
トラブルシュート
(1) slow_query_log:閾値超過を記録。(2) EXPLAIN ANALYZE:MySQL 8.0+。(3) SHOW PROCESSLIST:実行中クエリ。(4) SHOW ENGINE INNODB STATUS:詳細状態。(5) performance_schema:詳細な内部メトリクス。SQLチューニング も合わせて。
マネージドサービス
(1) AWS RDS for MySQL / Aurora MySQL。(2) Google Cloud SQL。(3) PlanetScale:Vitess ベース・サーバーレス。(4) Azure Database for MySQL。(5) マネージド利点:自動バックアップ/Failover/監視。料金・機能は最新の公式情報をご確認ください。
失敗しがちなパターン
(1) auto_increment 主キーの濫用:移行困難。(2) レプリ遅延を放置:データ整合性問題。(3) 接続枯渇:プールなしで爆発。(4) InnoDB バッファプール過少:性能低下。(5) マイグレーション本番直接:ロック地獄。対策は、(1)ULID 等の使用、(2)アラート設定、(3)PgBouncer 相当(ProxySQL)、(4)物理メモリの70%、(5)pt-online-schema-change、です。