テストは横断的な関心事です。データベースも同様です。

私たちは皆、DevOpsの原則に慣れ親しんでいます:小さく、十分にテストされたインクリメントを構築し、頻繁にデプロイし、手動のステップが不要になるようにパイプラインを自動化します。私たちはアプリケーションを注意深く監視し、アラートを設定し、問題のある変更をロールバックし、問題が発生した際に通知を受け取ります。

しかし、データベースに関しては、同じレベルの制御と可視性を欠いていることが多いです。パフォーマンスの問題をデバッグすることは困難であり、データベースがなぜ遅くなるのかを理解するのに苦労するかもしれません。スキーマの移行や修正は制御を失い、大きな課題を引き起こすことがあります。

これらの障害を克服するには、スキーマの移行と適応を効率化する戦略が必要です。これにより、最小限のダウンタイムやパフォーマンスへの影響で、効率的なデータベース構造の変更が可能になります。すべての変更がパイプライン全体で一貫してテストされることが重要です。これをどのように実現できるか見てみましょう。

テストを自動化する

データベースは多くの種類の障害にさらされやすいですが、アプリケーションと同じ厳密なテストを受けることはあまりありません。開発者は通常、アプリケーションが正しいデータを読み書きできるかをテストしますが、どのように達成されるかを見落とすことが多いです。インデックスの適切な使用を確保したり、不必要なレイジーローディングを避けたり、クエリの効率を検証したりするような重要な側面は、しばしばチェックされません。

例えば、私たちはデータベースが返す行数に焦点を当てますが、どれだけの行を読み取らなければならなかったかを分析することは疎かにしています。同様に、ロールバック手順はほとんどテストされず、変更のたびに潜在的なデータ損失のリスクにさらされています。これらのギャップに対処するためには、問題を事前に検出し、手動での介入の必要性を最小限に抑える包括的な自動テストが必要です。

私たちはしばしば負荷テストに頼ってパフォーマンス問題を特定しますが、これらは本番環境でクエリが十分に速いかどうかを明らかにする一方で、重大な欠点があります。まず、負荷テストは構築と維持に高コストがかかり、GDPRコンプライアンス、データの匿名化、状態を持つアプリケーションの慎重な取り扱いを必要とします。さらに、開発パイプラインの中で遅すぎる段階で行われます。負荷テストが問題を明らかにするときには、変更はすでに実施され、レビューされ、マージされているため、私たちは再度最初からやり直すことを余儀なくされます。最後に、負荷テストは時間がかかり、キャッシュを埋めたりアプリケーションの信頼性を検証したりするのに数時間を要するため、早期に問題をキャッチするには実用的ではありません。

スキーマ移行は、私たちのテストの範囲外にあることがよくあります。通常、移行が完了した後にテストスイートを実行するため、移行にどれくらいの時間がかかったか、テーブルの再書き込みを引き起こしたか、またはパフォーマンスのボトルネックを引き起こしたかを評価していません。これらの問題は、テスト中には見逃されがちで、本番環境にデプロイされたときにのみ明らかになります。

別の課題は、パフォーマンスの問題を早期に見つけるのに十分ではない小さなデータベースでテストを行っていることです。この不十分なテストに依存することは、負荷テストに時間を費やし、スキーマのマイグレーションなどの重要な側面を全くテストしていない可能性があります。このカバー不足は、開発速度を低下させ、アプリケーションを壊す問題を導入し、アジリティを妨げます。

これらの課題の解決策は、データベースのガードレールを導入することにあります。データベースのガードレールは、コードを書く際にクエリ、スキーマのマイグレーション、構成、データベース設計を評価します。パイプラインランや長時間の負荷テストに依存する代わりに、これらのチェックはIDEや開発者環境で直接実行できます。本番データベースの可観測性と予測を活用することで、ガードレールは実行計画、統計、構成を評価し、すべてが展開後にスムーズに機能することを確認します。

データベースを中心とした可観測性の構築

本番環境に展開する際、システムのダイナミクスは時間とともに変化する可能性があります。CPU負荷が急上昇するかもしれませんし、メモリ使用量が増加するかもしれません。データの容量が拡大し、データの分散パターンが変わるかもしれません。これらの問題を迅速に特定することは重要ですが、それだけでは不十分です。現在の監視ツールは生データで私たちを圧倒し、その理由をつなぎ合わせなければなりません。たとえば、CPU負荷が増加したことを示すかもしれませんが、なぜそのようになったのかを説明しないかもしれません。原因を調査し特定する負担は完全に私たちにかかっています。このアプローチは時代遅れで非効率です。

本当に迅速に動くためには、従来の監視から完全な 可観測性 へと移行する必要があります。生のデータに圧倒されるのではなく、問題の根本原因を理解するのに役立つ実用的な洞察が必要です。データベースのガードレールは、この変革を提供します。さまざまな要因がどのように相互に関連しているかを示し、問題を特定し、解決策を提案します。CPU使用率の急増を単に観察するのではなく、ガードレールは最近のデプロイメントがクエリを変更し、インデックスがスキップされる原因となり、それがCPU負荷の増加につながったことを理解するのに役立ちます。この明確さを持って、クエリやインデックスを修正して問題を解決するために迅速に行動できます。「見る」から「理解する」へのこのシフトは、速度と信頼性を維持するための鍵です。

データベース管理における次の進化は、自動的な問題調査から自動的な解決へと移行することです。多くの問題は、統合されたシステムを使用することで自動的に修正できます。可観測性ツールは、パフォーマンスと信頼性の問題を分析し、それを解決するために必要なコードや設定の変更を生成します。これらの修正は自動的に適用されるか、明示的な承認を必要とし、最小限の労力で問題が即座に解決されることを保証します。

問題を迅速に修正することを超えて、最終的な目標は、そもそも問題が発生しないようにすることです。頻繁なロールバックや失敗は進歩と機敏さを妨げます。真の機敏さは、問題を迅速に解決することによって達成されるのではなく、問題がめったに発生しないシステムを設計することによって達成されます。このビジョンに到達するためには段階的なステップが必要かもしれませんが、それは革新の最終的な方向性を示しています。

Metisは、これらの課題を克服する力を与えます。リポジトリにコミットされる前に変更を評価し、クエリ、スキーママイグレーション、実行計画、パフォーマンス、および正確性をパイプライン全体で分析します。MetisはCI/CDワークフローとシームレスに統合され、欠陥のある変更が本番環境に到達するのを防ぎます。しかし、それだけではなく、メトリクスを分析し、デプロイメント、拡張機能、設定を追跡することで、プロダクションデータベースへの深い可観測性を提供します。可能な場合は自動的に問題を修正し、手動介入が必要な場合には警告を発します。Metisを使用すれば、より迅速に動き、CI/CDパイプラインのあらゆる側面を自動化し、よりスムーズで信頼性の高いデータベース管理を実現できます。

誰もが参加する必要がある

データベースの可観測性は、問題を積極的に防ぎ、自動化された理解と解決に向けて進み、開発プロセス全体にデータベース特有のチェックを組み込むことです。古いツールやワークフローに依存することはもはや十分ではなく、今日の複雑さに適応する現代的なソリューションが必要です。データベースのガードレールはこのサポートを提供します。これにより、開発者は非効率なコードを作成するのを避け、スキーマや設定を分析し、パイプライン内のソフトウェア開発ライフサイクルの各ステップを検証できます。

ガードレールは、生の監視データを実用的な洞察に変換し、何が悪かったのかだけでなく、その修正方法も説明します。この機能はすべての業界において不可欠であり、システムの複雑さは今後も増加し続けるでしょう。先を行くためには、私たちはより迅速かつ効率的に動くことを可能にする革新的なツールとプロセスを受け入れなければなりません。

Source:
https://dzone.com/articles/testing-is-a-cross-cutting-concern-so-are-databases