機械孊習を䜿甚しおPostgreSQLの生産性を向䞊させる

画像



機械孊習は、デヌタの隠れたパタヌンを怜玢したす。 ITコミュニティでのこのトピックぞの関心の高たりは、それが生み出した䟋倖的な結果に関連しおいたす。 音声およびスキャンされたドキュメント、怜玢゚ンゞンの認識-これらはすべお機械孊習を䜿甚しお䜜成されたす。 この蚘事では、私たちの䌚瀟の珟圚のプロゞェクト、぀たりDBMSの生産性を向䞊させるために機械孊習法を適甚する方法に぀いおお話したす。

この蚘事の最初の郚分では、既存のPostgreSQLスケゞュヌラメカニズムを分析し、2番目の郚分では、機械孊習を䜿甚しおそれを改善する可胜性に぀いお説明したす。







SQLク゚リ実行プランずは䜕ですか



SQLは宣蚀型蚀語であるこずを思い出しおください。 これは、ナヌザヌがデヌタに察しお実行する操䜜のみを瀺すこずを意味したす。 DBMSは、これらの操䜜を実行する方法を遞択する責任がありたす。 たずえば、リク゚スト

SELECT name FROM users WHERE age > 25;
      
      





これを行うには2぀の方法がありたす。usersテヌブルからすべおの゚ントリを読み取り、25歳以䞊の条件が満たされおいるかどうかを確認するか、ageフィヌルドのむンデックスを䜿甚したす。 2番目のケヌスでは、䜙分なレコヌドを調べたせんが、むンデックスを䜿甚した操䜜のために1぀のレコヌドの凊理により倚くの時間を費やしたす。







より耇雑なク゚リを怜蚎する

 SELECT messages.text FROM users, messages WHERE users.id = messages.sender_id;
      
      





このJOINは、次の3぀の方法で完了できたす。







リク゚ストに耇数のJoin操䜜が必芁な堎合、リク゚スト内など、別の順序で実行するこずもできたす

 SELECT u1.name, u2.name, m.text FROM users as u1, messages as m, users as u2 WHERE u1.id = m.sender_id AND u2.id = m.reciever_id;
      
      









ク゚リ実行ツリヌは、ク゚リ実行プランず呌ばれたす。



explain



コマンドを䜿甚しお、DBMSが特定のク゚リに察しお遞択したプランを確認できたす。

 EXPLAIN SELECT u1.name, u2.name, m.text FROM users as u1, messages as m, users as u2 WHERE u1.id = m.sender_id AND u2.id = m.reciever_id;
      
      







芁求を実行し、遞択された蚈画を衚瀺するには、 explain analyse



コマンドを䜿甚できたす。

 EXPLAIN ANALYSE SELECT u1.name, u2.name, m.text FROM users as u1, messages as m, users as u2 WHERE u1.id = m.sender_id AND u2.id = m.reciever_id;
      
      







同じリク゚ストの異なるプランの実行時間は、桁違いに異なる堎合がありたす。 したがっお、ク゚リ実行プランの正しい遞択は、DBMSのパフォヌマンスに重倧な圱響を及がしたす。 PostgreSQLが今どのように蚈画を遞択するかを詳しく芋おみたしょう。



DBMSは最適なク゚リ実行プランをどのように探したすか



最適なプランを芋぀けるプロセスを2぀の郚分に分けるこずができたす。



たず、蚈画の䟡倀、぀たり蚈画を完了するために必芁なリ゜ヌスの量を評䟡できる必芁がありたす。 サヌバヌで他のタスクやク゚リが実行されない堎合、ク゚リの掚定実行時間は、それに費やされるリ゜ヌスの量に正比䟋したす。 したがっお、プランのコストは、任意の単䜍での実行時間であるず想定できたす。



第二に、最小コストの芋積もりで蚈画を遞択する必芁がありたす。 リク゚ストの耇雑さが増すに぀れお、プランの数が指数関数的に増えおいるこずを瀺すのは簡単です。したがっお、すべおのプランを調べお、それぞれのコストを芋積もり、最も安いプランを遞択するこずはできたせん。 最適なプランを芋぀けるために、より耇雑な離散最適化アルゎリズムが䜿甚されたす。単玔なク゚リには動的サブセットプログラミング、耇雑なク゚リには遺䌝的アルゎリズムです。











このプロゞェクトでは、最初のタスクに焊点を圓おたした。この蚈画に埓っお、その䟡倀を予枬する必芁がありたす。 実行蚈画を起動せずにこれを行うにはどうすればよいですか

実際に
PostgreSQLでは、蚈画に察しお2぀のコストが予枬されたす開始コストず総コストです。 起動コストは、プランが最初のレコヌドを発行するたでに費やすリ゜ヌスの量ず、合蚈コスト-プランを完了するために必芁な合蚈リ゜ヌスの量を瀺したす。 ただし、この蚘事ではこれは重芁ではありたせん。 将来的には、実装コストは総コストを意味したす。





このタスクは、2぀のサブタスクにも分かれおいたす。 最初に、各蚈画ノヌドに぀いお、その䞭で遞択されるタプルの数が予枬されたす。 次に、この情報に基づいお、各頂点のコスト、したがっお蚈画党䜓が掚定されたす。











PostgreSQLの2぀のサブタスクのどちらが悪化しおいるかを調べるために、少し調査したした。

以䞋の図の各点は、蚈画の1぀の頂点に察応しおいたす。 各頂点に぀いお、その頂点で遞択されたタプルの数ずその実行のコストが予枬され、その埌、遞択されたタプルの実際の数ず実行時間が枬定されたした。 右の図には、タプル数が正しく予枬されおいる頂点のみが衚瀺されおいるため、コスト掚定の品質を刀断するために䜿甚できたす。

予枬されるタプルの真の数の䟝存性 蚈画の時間のコストぞの䟝存

タプルの数が正しく予枬されおいる堎合


最初の図は、最初のサブタスクを解決した結果が真のサブタスクず数桁異なるこずを瀺しおいたす。 2番目の図は、実行時間ず匷い盞関関係が芋られるため、最初のサブタスクの正しい解決策で、PostgreSQLモデルが1぀たたは別の蚈画を実行するコストを適切に掚定するこずを瀺しおいたす。 その結果、DBMSのパフォヌマンスは䞡方のサブタスクの䞍正確な解決策に苊しむこずがわかりたしたが、各頂点に誀っお蚭定されたタプルの数に苊しむこずがわかりたした。



PostgreSQLで䜿甚される最初のサブタスクの゜リュヌションを怜蚎しおください。



DBMSは頂点のタプル数をどのように掚定したすか



最初に、簡単なク゚リで遞択されたタプルの数を予枬しおみたしょう。

 SELECT name FROM users WHERE age < 25;
      
      







少なくずもこれを行う機䌚を埗るために、デヌタに関するいく぀かの情報、その統蚈が必芁です。 PostgreSQLは、このデヌタ情報ずしおヒストグラムを䜿甚したす。











ヒストグラムを䜿甚するず、25歳未満のナヌザヌの割合を簡単に埩元できたす。 蚈画の各頂点に぀いお、凊理されたすべおのタプルに察する遞択されたすべおのタプルの割合は、 遞択性ず呌ばれたす。 䞊蚘の䟋では、SeqScan遞択性は玄0.3です。 頂点によっお遞択されたタプルの数を取埗するには、頂点の遞択性に凊理されたタプルの数を掛けるだけで十分ですSeqScanの堎合、これはテヌブル内のレコヌドの数になりたす。



より耇雑なク゚リを怜蚎する

 SELECT name FROM users WHERE age < 25 AND city = 'Moscow';
      
      







この堎合、幎霢ず郜垂ごずのヒストグラムを䜿甚するず、 限界サンプル、぀たり25歳未満のナヌザヌの割合ずナヌザヌ間の癜雲母の割合のみを取埗できたす。 PostgreSQLモデルでは、すべおの条件 5 < a AND a < 7



圢匏の条件のペアを陀き、条件5 < a < 7



自動的に倉わりたすは独立ず芋なされたす。 数孊者は、䞡方の条件が同時に満たされる確率が確率の積に等しい堎合、2぀の条件AおよびBを独立しお呌び出したす。PAおよびB= PAPB。 ただし、適甚された意味では、2぀の量の独立性は、別の量の分垃が1぀の量の倀に䟝存しないずいう事実ずしお理解できたす。



問題は䜕ですか







堎合によっおは、独立性の仮定が満たされないこずがありたす。 このような堎合、PostgreSQLモデルはあたりうたく機胜したせん。 この問題に察凊するには2぀の方法がありたす。



最初の方法は、倚次元ヒストグラムを䜜成するこずです。 この方法の問題は、次元の増加に䌎い、倚次元ヒストグラムが同じ粟床を維持するために指数関数的に増加するリ゜ヌス量を必芁ずするこずです。 したがっお、小さな次元のヒストグラムに限定する必芁がありたす2〜8回の枬定。 ここから、このメ゜ッドの2番目の問題が続きたす。倚次元ヒストグラムを構築するこずが理にかなっおいる列のペアたたはトリプル、たたは4 ...に぀いお、どういうわけかを理解する必芁がありたす。

この問題を解決するには、リ゜ヌスを集䞭的に䜿甚するク゚リの蚈画を調査し、列間の盞関を刀断し、どのヒストグラムを完了する必芁があるかを手動で瀺す優れた管理者、たたは統蚈テストを䜿甚しお互いに䟝存しおいる列を芋぀けようずする゜フトりェアツヌルが必芁です。 ただし、すべおの䟝存列のヒストグラムをプロットするこずは意味がないため、゜フトりェアはク゚リ内の列の同時発生も分析する必芁がありたす。 珟圚、PostgreSQLで倚次元ヒストグラムを䜿甚できるパッチがありたすが、管理者はこれらの倚次元ヒストグラムを䜜成する列を手動で蚭定する必芁がありたす。



機械孊習を䜿甚しお遞択性を評䟡する



ただし、この蚘事では別のアプロヌチに焊点を圓おおいたす。 別のアプロヌチは、いく぀かの条件の共同遞択性を芋぀けるための機械孊習の䜿甚です。 前述のように、機械孊習はデヌタのパタヌンを探したす。 デヌタはオブゞェクトのコレクションです。 この䟋では、オブゞェクトは蚈画の1぀の頂点にある条件のセットです。 これらの条件ずその限界遞択性の䞋で、共同遞択性を予枬する必芁がありたす。



蚈画の最䞊郚で芳察される兆候は、そのすべおの条件の限界遞択性です。 定数のみが異なるすべおの条件は互いに同等であるず仮定したす。 この仮定は、空間の次元を削枛するために適甚される兞型的な機械孊習手法ハッシングトリックず考えるこずができたす。 ただし、この背埌にはさらに匷力な動機がありたす。条件定数を予枬するために必芁なすべおの情報は、その限界遞択性に含たれおいるず想定しおいたす。 これは、a <constずいう圢匏の単玔な条件に察しお厳密に瀺すこずができたす。ここでは、条件の遞択性から、定数の倀を埩元できたす。぀たり、情報の損倱は発生したせん。



結果の機械孊習タスクは、図に瀺すようになりたす。









他のすべおの列の既知の倀によっお、巊端の列を予枬する必芁がありたす。 特定の実数を予枬する必芁があるこのようなタスクは、機械孊習の回垰問題ず呌ばれたす。 それを解決するメ゜ッドは、それぞれリグレッサヌず呌ばれたす。



すべおの列の察数に移りたしょう。 線圢回垰を䜿甚する堎合、特別なケヌスずしお珟圚のPostgreSQLモデルを取埗するこずに泚意しおください。



線圢回垰









すべおの構成可胜なパラメヌタヌが1に等しい堎合、暙準のPostgreSQL遞択モデルを取埗したす。









暙準的なリッゞ回垰法では、次の機胜を最小化するこずでパラメヌタヌを怜玢するこずをお勧めしたす。









さたざたなアプロヌチをテストするために、TPC-Hベンチマヌクを䜿甚したした。



次のメ゜ッドが単玔なリグレッサヌずしお䜿甚されたした。



分析゜リュヌションで生じる䞍安定性の性質を説明したしょう。 リグレッサヌの応答は、最適なプランを探しおいるオプティマむザヌの入力倀です。 芳察するオブゞェクト実行可胜プランは、オプティマむザヌの出力倀です。 したがっお、芳察するオブゞェクトは、リグレッサヌの応答に䟝存したす。 このようなフィヌドバックシステムは、リグレッサヌが環境に圱響を䞎えないシステムよりも研究がはるかに困難です。 これらの甚語では、ガりス法による分析゜リュヌションは䞍安定です-すぐに孊習したすが、よりリスクの高い゜リュヌションを提䟛するため、システム党䜓が悪化したす。











線圢モデルの詳现な調査の結果、デヌタが適切に蚘述されおいないこずがわかりたした。 したがっお、テストした方法の最良の結果がkNNによっお瀺されたした。





たた、この方法は線圢回垰よりも安定しおいたす。TPC-Hベンチマヌクでの収束には、䞊の図に瀺すように2トレヌニングサむクルのみが必芁です。



機械孊習の䜿甚がもたらすもの



kNNアルゎリズムで埗られた結果を瀺したす。



機械孊習の前に 機械孊習の埌










提案されたアプロヌチは、実際にDBMSの時間を短瞮するこずがわかりたす。 ベンチマヌクリク゚ストのタむプの1぀では、加速は30〜45で、もう1぀は2〜4倍です。



開発の方法は䜕ですか



既存のプロトタむプをさらに改善するには、さらに倚くの指瀺がありたす。



  1. 蚈画を芋぀ける問題。 珟圚のアルゎリズムは、アルゎリズムが収束する蚈画においお、遞択性予枬が正しいこずを保蚌したす。 ただし、これは遞択した蚈画の党䜓的な最適性を保蚌するものではありたせん。 グロヌバルに最適な蚈画たたは少なくずも最適なロヌカル最適蚈画の怜玢は、個別のタスクです。
  2. 倱敗した蚈画の実行を終了する割り蟌みモヌド。 暙準のPostgreSQLモデルでは、最適なプランは1぀しかなく、倉曎されないため、プランの実行を䞭断するこずは意味がありたせん。 機械孊習の導入により、遞択性の予枬に重倧な誀りがあった蚈画の実行を䞭断し、受け取った情報を考慮しお、実装に最適な新しい蚈画を遞択できたす。 ほずんどの堎合、新しい蚈画は以前の蚈画ず倧きく異なりたす。
  3. 情報の陳腐化のモヌド。 DBMSの動䜜䞭に、デヌタず䞀般的なク゚リが倉曎されたす。 したがっお、過去に取埗されたデヌタはもはや関連性がない可胜性がありたす。 珟圚、圓瀟は情報の関連性を刀断し、それに応じお叀い情報を「忘れる」ための優れたシステムに取り組んでいたす。




あれは䜕だった



この蚘事では





ご枅聎ありがずうございたした



画像



文孊






All Articles