パフォーマンスが最優先事項である今日の進化し続けるハイテク業界において、データベースはスムーズなユーザー体験と信頼性の高いアプリケーションを確保する上で重要な役割を担っています。
ユーザ・エクスペリエンスを向上させるために1ミリ秒を争うWeWardでは、PostgreSQLを卓越したパフォーマンス・エンジンに変えるという野心的な旅に出ました。この記事では、PostgreSQLを大幅に最適化するために直面した課題、実装したソリューション、ベストプラクティスについて説明します。
ユーザーが即座のレスポンスタイムを期待する世界では、遅いデータベースはフラストレーションや機会損失につながります。WeWardでは、この課題は、毎日何百万ものトランザクションと、完璧なパフォーマンスを必要とする複雑なクエリに反映されます。当社の課題には、遅いクエリ、過剰な負荷、拡張性の向上が必要なアーキテクチャなどがありました。
これらの障害をどのように克服したかを紹介しよう。
PostgreSQLの最適化の基礎は問い合わせ分析から始まります。私たちは問い合わせの実行計画を調査することで非効率を特定しました。
使用 説明する
そして アナライズ
そして、私たちはクエリのX線画像を手に入れた。
問題のあるクエリの例
SELECT level_customer.*
FROM level_customer
JOIN level ON level.id = level_customer.level_id
WHERE level_customer.customer_id = XXXXXXX
AND level_customer.start_date <= '2024-05-07'::date
AND level.version = 2
ORDER BY level_customer.start_date DESC, level.value DESC
LIMIT 1;
検出された問題
解決策:インデックスの作成:
CREATE INDEX idx_level_customer_customer_date_value
ON level_customer (customer_id, start_date DESC, level_id DESC);
プランナーの調整PostgreSQLに ネスティッド・ループ・ジョイン
デフォルトの ハッシュジョイン
この特定のクエリに対して。
マテリアライズド・ビュー:複雑なクエリに対して、マテリアライズド・ビューは各実行の計算オーバーヘッドを削減し、非常に安定したパフォーマンスを提供します。
1日に数百万のクエリが発生するため、負荷を分散するためにレプリカベースのアーキテクチャを採用しました。
メリット
技術的な考察:
何十億行もの行を含むテーブルは、読み取りや書き込みの処理速度を著しく低下させます。パーティショニングはテーブルをより小さなサブセットに分割し、クエリの効率を向上させる。
道具だ: pg_パートマン
メリット
各 PostgreSQL 接続はシステムリソースを消費します。サーバの過負荷を防ぐために
最大接続数
は、利用可能なハードウェアとアプリケーションのニーズに基づいて調整された。PostgreSQLの主なメモリパラメータ:
共有バッファ
: 頻繁にアクセスされるデータをキャッシュするためのメモリ割り当てを制御する。ワークメモリー
: クエリ実行中のソートとハッシュ・テーブルのためのメモリを定義します。重要な("ホット")データはPostgreSQLに残り、アクセス頻度の低い("コールド")データはAmazon S3またはGoogle Cloud Storageに転送される。コールドデータの分析にはGoogle BigQueryを使用する。
メリット
WeWardは、以下のような高度な監視ツールを使用しています:
メリット
厳密なクエリ最適化、インテリジェントなリソース管理、最新のアーキテクチャを組み合わせることで、PostgreSQLはWeWardにとって重要な味方となりました。これらのソリューションは、データベースの可能性を最大化することを目的とするあらゆる組織に適用可能です。
PostgreSQLを最適化するための戦略を教えてください。あなたの経験を共有し、会話に参加してください!
モバイルアプリをご覧ください:WeWard