こんにちは!
ナビゲータのEVEです。
まだ、動作するかどうか検証をしていないのですが、その前にやることがありました。昨日話したとおり、Prototype EVEでは、構成管理はしていないのですが、 コンロールファイル でディレクトリを管理していました。そのため、今回システムをフォルダ毎に分けるという判断をしたため、そちらの方も修正しなくてはいけません。ただ、覗いてみて拍子抜け・・・・。ほとんどが相対アドレスで管理しており、絶対アドレスで管理しているのはバッチ処理用の部分だけ・・・。ただ、そちらも、上位の階層で管理していたので、ほとんど修正する必要はありませんでした。ただ、ここで、考えさせられる問題を思い出しました。
[ディレクトリ管理はどこで?]
Prototype EVEは、先ほど話したとおり、ファイルで管理しています。今まで複数のプロジェクトに参加しましたが、やはり、ファイルで管理しているところが多いように感じています。ただ、ほとんどの情報をデータベースで管理している有名なシステムがあります。それは、皆さんも知っていると思いますが、 Oracle ・・・。
[Oracle]
現在、世界最高峰のデータベースです。Oracle6では問題が多々あった(私が以前聞いた話です)そうですが、私が初めて利用した、Oracle8iでは、かなり洗練されたイメージがあります。
Oracleと他のデータベースを比較した場合の強みは、 高セキュリティ 、 高可用性 、 スケーラビリティ 、そして特に他のデータベースとの差別化ができていたのは、 行ロック でした。
近年、多くのデーターベースが行ロックできるようになりましたが、つい最近というイメージです。 SQLServer も2005年からできたという話がありますが、不完全で完璧な製品を提供できるようになったのは、他のデータベースと同様です。
そのため、Oracleを多くのデータベースエンジニアが選択し、導入、利用しています。
そんな世界でNo1と思われる、Oracleなのですが、ほとんどの情報をデータベースで管理しています。本で読んだ、Oracleのエンジニアから聞いたという分けではなく、 管理テーブルをひたすら検索して得た印象 です。
[データベースですべての情報を管理するうえでの問題点]
データベースですべての情報を管理するうえでの問題点、それは、 検索速度 です。
多くのプロジェクトでは、複雑なSQLを利用しているケースが非常に多いのです。簡単なSQLでシステムを製造しているプロジェクトは正直おめにかかっていません。そのため、1つのSQL文を発行すると、OracleがSQL文を解析するのに時間がかかり、かなりの時間を要します。
そのような作りをしている大きな原因が、やはり、 検索速度 です。何回もSQLを発行すると時間がかかるため、1回で済ませようとしているようです。そして、Oracleの場合1度発行したSQL文は 再利用 され、検索速度が速いというのです。
ただ、ここで疑問なのが、「1度発行したSQL文」という部分です。私の考え方では、全く同じSQLでないと再評価の対象となります。それは、Oracleは以下の流れでSQL文を評価しています。
?SQL文を ハッシュ化 します
?同ハッシュから管理アドレスを探します
?管理アドレスにデータが格納されていた場合、その結果をユーザに返却します
という流れで、検索速度の速さを実現しているという認識です。そのため、複雑なSQL文の1箇所でも変わった場合、ハッシュ値が変わってしまい、再評価の対象になると考えています。
というのは、私の意見なのですが、実際のところはどうなのか、ChatGPTに聞いてみました。
OracleデータベースがSQL文を評価するプロセスは、簡単に言うと次のようなステップで進行しますが、少し詳細を加えて説明します:
?SQL文の構文解析と構造解析
最初に、Oracleデータベースは受け取ったSQL文を解析し、その文の構文と構造を理解します。これにより、どのテーブルにアクセスし、どのデータを取得または変更するかを把握します。
?クエリ最適化
解析されたSQL文は、クエリ最適化フェーズに進みます。このフェーズでは、最適な実行計画を決定するために、異なる実行パスやインデックスの選択などの選択肢が評価されます。最適な実行計画を選択することで、クエリの性能が最大化されます。
?実行計画のキャッシュ
SQL文の実行計画は、キャッシュに格納されることがあります。これにより、同じSQL文が再度実行される場合、実行計画を再計算する必要がなくなり、クエリの実行が高速化されます。このステップは、SQL文をハッシュ化してキャッシュ内で検索することで行われます。
?データアクセス
実行計画が確定したら、実際のデータアクセスが行われます。これは、テーブルやインデックスからデータを読み取る、またはデータを更新するステップです。
?結果の返却
データベースがデータアクセスを実行し、必要なデータが取得されたら、その結果がユーザに返却されます。これには、クエリの結果セットや更新の成功または失敗に関する情報が含まれます。
要するに、SQL文のハッシュ化はクエリ最適化の一部であり、管理アドレスを特定するという簡略化された概念はOracleの内部動作を正確に反映しているわけではありません。Oracleデータベースの内部プロセスは非常に複雑で、パフォーマンスを最適化し、データを効率的に取得するために多くの最適化ステップが組み込まれています。
ちょっと、分かりずらいので、再度、SQL文を1箇所でも変更した場合、再評価の対象となるかどうか、聞いてみました。
SQL文が変更されると、通常、新しいSQL文が再評価の対象となります。OracleデータベースはSQL文のテキスト全体をハッシュ化し、このハッシュ値を使用してクエリキャッシュ内での検索を行います。異なるSQL文には異なるハッシュ値が生成されるため、同じSQL文であっても1か所でも異なる場合、新しいハッシュ値が生成されます。
このため、同じクエリを再度実行する際に、データベースは新しいSQL文に対してクエリ最適化を実行し、新しい実行計画を決定します。したがって、SQL文の1か所でも異なる場合、データベースは新しいSQL文を評価し、新しい実行計画を生成します。
ただし、一部のSQLクライアントやアプリケーションは、クエリキャッシュを無視してSQL文を実行する設定になっていることもあります。この場合、SQL文が変更されてもクエリキャッシュの再評価は行われません。したがって、SQL文の変更が正しく反映されることを確認するために、適切な設定を行う必要があります。
ということは、 プレースフォルダ で値を変更しているSQL文は常に再評価の対象となり、以前検索した結果が再利用されることは期待できないと考えたほうがいいようです。
[デバックできないSQL]
常に再評価がありそうだという複雑なSQLですが、プログラムのように デバックができません 。但し、プログラム同様に分岐的な記述なども可能です。
プログラムで言ったら、デバックがないプログラムを目検で確認するようなモノです。そんな行為はどのプロジェクトも許可しません。ただ、SQLは、どのプロジェクトでも認められています。
しかも、試験をする場合、 ホワイトボックス試験 の難易度がかなり高くなります。そのため、 ブラックボックス試験 しか実施していないと思われます。
そんなプロジェクトで、複雑なSQL文を見ながらかなり、不安を覚えた記憶があります。
[あとがき]
本日は、システム情報をデータベースで管理するのは問題があり、その大きな問題が検索速度という話をしました。但し、冒頭にも書きましたが、Oracleは、データベースでほとんどの情報を管理しているようです。では、なぜそんなことができるのでしょうか?明日は、「システムエンジニアが目指す中小企業診断士」を書く予定でしたが、変更しこの続きを書きたいと思います。
では、また!
【このカテゴリーの最新記事】
- no image