PostgreSQLハッシュパーティショニングを20倍高速化:カタログルックアップの回避

2025-08-27
PostgreSQLハッシュパーティショニングを20倍高速化:カタログルックアップの回避

PostgreSQLのハッシュパーティショニングは、高スループットアプリケーションにおいてカタログルックアップのオーバーヘッドが発生します。この記事では、アプリケーションレイヤーでパーティションインデックスを事前に計算することで、PostgreSQLのカタログルックアップを回避する最適化手法を紹介します。Ruby gemの`pg_hash_func`を使用するか、PostgreSQLのハッシュ関数を直接呼び出すことで、クエリ速度を20倍以上高速化し、レイテンシを大幅に削減できます。このアプローチは、パフォーマンスが重要なシナリオに適しており、シンプルさとパフォーマンスのバランスを取る上でより多くの選択肢を提供します。

続きを読む

AIコードアシスタント:恩恵か呪いか?

2025-06-17
AIコードアシスタント:恩恵か呪いか?

AIコーディングアシスタントはますます高度になり、クリーンで効率的なコードを生成するようになりました。しかし、これにより、「早すぎる結論」という問題が発生する可能性があります。開発者は一見完璧なソリューションに魅了され、より深い問題を見過ごしてしまうのです。この記事は医学的なアナロジーを用いて、AIを経験豊富な医師に例えています。経験豊富な医師でも、経験によってまれな病気を看過してしまう可能性があるからです。著者は、開発者がAIの提案を批判的に評価し、積極的に複数の解決策を探求し、「迅速な修正」の落とし穴に陥らないようにアドバイスしています。これにより、コードの品質を向上させ、技術的負債の蓄積を防ぐことができます。

続きを読む
開発

PostgreSQLの驚き:CTE、DELETE、LIMITの予期せぬ挙動

2025-05-04
PostgreSQLの驚き:CTE、DELETE、LIMITの予期せぬ挙動

バッチ処理のためにCommon Table Expression (CTE)とDELETE...RETURNING、LIMITを組み合わせたPostgreSQLで、予期せぬ挙動が発生しました。1行だけ削除するつもりでしたが、複数行が削除されました。`EXPLAIN ANALYZE`で、ネストしたループ半結合の最適化が行われ、LIMIT 1句が複数回実行されていることが判明しました。解決策は、クエリを再構成し、CTEを避け、DELETEのWHERE句に直接サブクエリを使用することでした。これは、CTEが常にクエリプランの最適化を防ぐとは限らないこと、重要な操作ではプランを注意深く調べる必要があることを示しています。

続きを読む
開発

PostgreSQLの同期コミット:パフォーマンスと耐久性のトレードオフ

2025-03-19
PostgreSQLの同期コミット:パフォーマンスと耐久性のトレードオフ

この記事では、PostgreSQLの`synchronous_commit`設定のパフォーマンスへの影響について考察しています。これをオフにすると、トランザクションのスループットが大幅に向上し、I/OとCPUの負荷が軽減されますが、データ損失のリスクウィンドウが発生します。著者は、I/O制約のあるシステムでTPSが30%向上したことを実証しています。この記事では、セッション、トランザクション、または操作ごとに`synchronous_commit`を調整する微妙なアプローチを提唱し、Ruby on Railsの例を示しています。また、Aurora PostgreSQLでは、`synchronous_commit`を`off`に設定することで、最大の性能向上を得られることも指摘しています。

続きを読む

PostgreSQLのスケーリング:高成長スタートアップにおける奇妙な問題と解決策

2025-02-09
PostgreSQLのスケーリング:高成長スタートアップにおける奇妙な問題と解決策

この記事では、急成長中のスタートアップ企業が直面する一般的なPostgreSQLスケーリングの課題について説明します。ロック競合、インデックスブロート、TOASTストレージの非効率性、垂直スケーリングと水平スケーリングの複雑さ、追記専用テーブルと更新が多いテーブル、マルチテナントなどの問題を網羅しています。それぞれの問題に対して、データベースパラメータの調整やコンカレンシーツールから、データアクセスパターンの再考やアドバイザリロックなどの機能の使用まで、実践的な解決策が提供されています。また、負荷下でのスキーマ変更、ゼロダウンタイムでのアップグレード、効率的なCOUNTクエリ戦略などの高度なトピックも探求します。これは、要求の厳しい環境でPostgreSQLのパフォーマンスを最適化しようとするエンジニアにとって貴重なリソースです。

続きを読む

データベースモック:メリットよりデメリットの方が多い?

2024-12-30
データベースモック:メリットよりデメリットの方が多い?

速度と簡潔さゆえに魅力的ですが、著者はデータベースモックを用いたテストは、結局のところ解決する問題よりも多くの問題を引き起こすと主張しています。ユーザー作成の例は、モックと実データベースに対するテストの違いを浮き彫りにしています。実データベーステストは、一意制約違反、デフォルト値の処理、パフォーマンスボトルネックなど、潜在的な問題を早期に明らかにし、デバッグ時間を節約し、本番環境のリスクを軽減します。アプリケーションとスキーマが進化するにつれて、実データベーステストは、新しい検証、データ型の変更、タイムスタンプの精度変更をより適切に処理し、コードが実際のデータベースと整合することを保証します。著者は、データアクセス層については実データベーステストを優先し、サービス層ではビジネスロジックとデータの相互作用を明らかにするために使用することを提案しています。一方、コントローラー層はサービス呼び出しを効果的にモックできます。実データベーステストとモックのバランスが、堅牢なアプリケーション構築の鍵となります。

続きを読む