PostgreSQL 8.3

Josh Berkus は 、PostgreSQL 8.3beta1のリリヌスを発衚したした 公匏のChangelogを参照。 開発者はパッチ凊理䜜業を完了するのに6か月以䞊かかりたした2007幎4月1日に機胜の凍結が行われたこずを思い出しおください。 それで、今幎、䞖界で最も開発されたオヌプンDBMSを私たちに喜ばせるものをあなたに䌝える時が来たした。



リスト党䜓を4぀の郚分に分けたす。 最初の、倚くの最も重芁な郚分では、パフォヌマンスに䜕らかの圢で関連する倉曎をリストしたす。 2番目では、デヌタベヌスプログラマ向けの新機胜のリストを提䟛したす。これは、既にそれほど脆匱ではないPostgreSQLの「機胜」のセットをさらに拡匵するように蚭蚈されおいたす。 3番目の郚分は、デヌタベヌス管理者向けの革新に専念したす。 最埌に、最埌に、Postgresサテラむトプロゞェクトであるオヌプン゜ヌスプロゞェクトに぀いお説明したす぀たり、独自の開発サむクルがありたす。



性胜



そもそも、今日安定ブランチが8.2、珟圚のバヌゞョンは8.2.5PostgreSQLは、オヌプン゜ヌスの遞択肢だけでなく、䞻芁な商甚DBMSずのパフォヌマンスの面でも競合しおいたす。 Oracleなど。 これはもはや空のフレヌズではありたせん。サンが実斜したテストの結果を芋おください。 もう遅い象はいたせん 豊富な皮類のむンデックス、システムのチュヌニング、非垞に倧きなボリュヌムず負荷の操䜜、耇補およびスケヌリングシステムの適切な遞択の幅広い可胜性-これらはすべお、珟代の象にずっお「厳しい」ものです。 開発速床でさえ、他のDBMSず比范しおPostgresを有利に区別したす。毎幎、私たちは垞に重芁な䞀歩を螏み出したす。



PostgreSQLバヌゞョン8.3のパフォヌマンスの新機胜は䜕ですか 倚くの倉曎は重芁です。 PostgreSQL開発コヌディネヌタヌのBruce Momjianによるず、Postgresmanの招埅で少し前にモスクワを蚪れた人によるず、Postgresの開発者が近幎忙しくしおいるシステムパフォヌマンスの最適化䜜業は非垞に困難です。 各ステップには、たすたす倚くの人件費が必芁であり、開発者の時間ず劎力がたすたす必芁になりたす。



これらの本圓に重芁な倉曎の1぀は、 HOTヒヌプのみのタプルず呌ばれる「チップ」ず安党に考えるこずができたす。 これはおそらくパフォヌマンスの面で最も重芁な倉曎の1぀です。 この倉曎の内容を理解するには、PostgreSQLがいわゆるマルチバヌゞョンアクセス制埡モデル MVCC 、マルチバヌゞョン同時実行制埡を実装しおいるこずを芚えおおく必芁がありたす。







HOTの本質は次のずおりです。 以前、このアプロヌチを実装する前に、テヌブルの行を曎新するずき、むンデックス付き列がこれらの倉曎に圱響を䞎えたかどうかに関係なく、テヌブルの行を曎新するたびにすべおのむンデックスの新しいバヌゞョンが衚瀺されたした図「HOTなしの曎新」を参照。 ここで、新しいバヌゞョンの行が前のバヌゞョンず同じメモリペヌゞに分類され、むンデックスが䜜成された列が倉曎されなかった堎合、むンデックスは同じたたです。 しかし、それだけではありたせん。 そのような可胜性がある堎合、ヒヌプペヌゞ内のスペヌスの「瞬間的な」再利甚が発生したす。 圓然、VACUUM操䜜䞭に実行される䜜業量が枛少したす。 図 「HOT update」は、行がどのように曎新されるかを抂略的に瀺したす。



次の新芏性は、たず第䞀に、倚数のWeb開発者にアピヌルしたす。 バヌゞョン8.3以降、PostgreSQLのトランザクションは非同期にするこずができたす 。



぀たり、トランザクションコミット操䜜COMMITが実行されるず、PostgreSQLサヌバヌは、高䟡なトランザクションログ同期WAL fsync操䜜が完了するたで埅機したせん。 ぀たり、すべおの論理条件が満たされるずすぐに、トランザクションは正垞に完了したず芋なされたす必芁な敎合性制玄がすべおチェックされたす。 物理的に、トランザクションログは非垞に短い時間で曞き蟌たれたす通垞、正垞に機胜するシステムでは、これは最倧200〜1000ミリ秒です。環境倉数synchronous_commitは、トランザクションの状態同期/非同期を担圓したす。 非同期モヌドぞの切り替えは簡単です。

SET synchronous_commit TO OFF;





非同期トランザクションは、fsync操䜜が無効になっおいるサヌバヌ操䜜モヌドの代替ではないこずに泚意しおください。 実際には、fsync = offモヌドは、ベヌスの䞀貫性のない状態に぀ながる可胜性がありたずえば、予期しない機噚の故障や電力損倱の堎合、信頌性の高い機噚が䜿甚されおいる堎合にのみ掚奚されたすたずえば、バッテリヌ付きのディスクドラむブコントロヌラヌ。 新しい機胜を䜿甚しおも、デヌタの䞍敎合は発生したせん。 可胜な最倧倀は、デヌタのごく䞀郚の損倱ですこれも、深刻なサヌバヌ障害OS、ハヌドりェア、電源障害の堎合。 非同期トランザクションの兞型的な䟋は、いく぀かの行の損倱が重倧でない堎合に、テヌブルログたずえば、ナヌザヌアクションのログに倧量の情報を栌玍するタスクです。 ただし、すべおの重芁なトランザクションは匕き続き同期できたす。



別のパフォヌマンスの向䞊は、PostgreSQLがク゚リSeqScan操䜜を実行するずきにテヌブルを順次スキャンする状況に関連しおいたす。 バヌゞョン8.3より前の堎合、このような堎合、異なるPostgresプロセスが同じゞョブを同時に実行したずいう状況がしばしば発生したした- 同期スキャン「同期ビュヌ」の実装のおかげで、同じテヌブルを同時に芋るようになりたした1぀のテヌブルの時間は1回のスキャンでしか実行できたせん。 これは次のように達成されたす。 セッション内で、SeqScanがすでに実行されおいるテヌブル別のセッション甚にSeqScanが必芁な堎合、既に実行されおいるSeqScanの結果ぞの「移動䞭のゞャンプ」がありたす。 このプロセスが完了するず、必芁に応じお、別の䞍完党なSeqScanを䜿甚しお結果が「補足」されたす図を参照。



チェックポむントプロセスシステム「コントロヌルポむント」によっお生じるストレスの圱響を軜枛する䜜業は継続しおいたす。チェックポむントはすぐに実行されるのではなく、埐々に実行されたす。プロセスは時間内に「広がり」たす。 したがっお、この倉曎の名前はチェックポむント平滑化です。 サヌバヌを定期的にシャットダりンし、「明瀺的な」チェックポむント操䜜 CHECKPOINTコマンドを実行しおいる間、デヌタは可胜な限り高速にディスクに曞き蟌たれるこずに泚意しおください。



パフォヌマンスの説明を終了するために、PostgreSQLを䜿甚するシステムのパフォヌマンスを改善するために蚭蚈された他の倉曎点の短いリストを以䞋に瀺したす。





デヌタベヌス開発者



ここで泚意すべき最も顕著な重芁な倉曎は、 党文怜玢モゞュヌルcontrib / tsearch2のシステムコアぞの移行です。 ロシアの開発者Oleg BartunovずFedor Sigaevによっお開発されたtsearch2は、長い間Postgresの最も人気のあるcontribモゞュヌルです。 党文怜玢をカヌネルに移行するためのパッチは、骚の折れる長い䜜業の結果ずしおこの倏に採甚されたしたパッチの受け入れバヌゞョンは58ですPostgreSQLチヌムのいく぀かの䞻芁な開発者によっお、プロゞェクトの歎史の䞭で最倧です。



tsearch2モゞュヌルのすべおの機胜がデフォルトで䜿甚可胜になり、新しいPostgreSQLバヌゞョンぞの移行プロセスが倧幅に簡玠化されるずいう事実に加えお、蟞曞ずテキスト凊理ルヌルの構成がより簡単になりたす基本的な構成操䜜はすべおSQLコマンドを䜿甚しお実行されたす。 ここでは、たずえば、簡単なシ゜ヌラス蟞曞を䜜成できたす。

 テキスト怜玢蟞曞の䜜成thesaurus_astro
     TEMPLATE =シ゜ヌラス、
     DictFile = thesaurus_astro、
    蟞曞= english_stem
 ;
 ALTER TEXT SEARCH CONFIGURATIONロシア語
     lword、lhword、lpart_hwordのマッピングを远加
         WITH thesaurus_astro、english_stem; 


むンデックス䜜成プロセスも簡玠化されたした。 通垞のテキスト列の䞊にGINむンデックスを䜜成する䟋远加の列ずトリガヌを䜜成せずに

 むンデックス䜜成pgweb_idx ON pgweb
     USING ginto_tsvector 'russian'、title || body; 


たた、関連性によるランキングを䜿甚したク゚リの䟋は、特殊関数plainto_tsqueryを䜿甚しおtsqueryを取埗したす文字の゚スケヌプを忘れお、プレヌンテキストをtsqueryにすばやく簡単に倉換できたす。

 遞択
     ts_rank_cdtextsearch_index、qASランク、タむトル
から
     pgweb、plainto_tsquery「超新星」q
どこ
     q @@ textsearch_index
 ORDER BY
    ランクDESC LIMIT 10; 




もう1぀の泚目すべき倉曎点は、この蚘事の著者が参加したXMLサポヌトです。 この機胜は、SQL2003暙準暙準の14番目の郚分、SQL / XMLに埓っお実装されおいたす。



たず、カヌネルには特別なxml



デヌタ型が組み蟌たれおいたす。 このタむプを䜿甚する堎合、サヌバヌはデヌタが正しく圢成されおいるかどうかを確認したす 敎圢匏チェック 。 さらに、ドキュメントの䞀郚の操䜜が蚱可されるナヌスケヌスがありたすこれにより、 xml



デヌタ型でXMLを操䜜するための「クロヌズ」関数のプロパティを提䟛できたす。



SQL2003暙準に埓っお、リレヌショナルデヌタをXMLに倉換するための䞀連の関数いわゆるSQL / XML発行関数が実装されおいたす。 XMLデヌタを生成するリク゚ストの簡単な䟋を次に瀺したす。

  SELECT XMLROOT
    XMLELEMENT
       NAME 'some'、
       XMLATTRIBUTES
          'val' AS 'name'、
          1 + 1 AS 'num'
       、
       XMLELEMENT
          NAME 'more'、
          「foo」
       
    、
   バヌゞョン「1.0」、
   スタンドアロンはい
 ; 




さらに、DTD怜蚌のサポヌト xmlvalidatedtd()



関数、XPath匏の評䟡のサポヌトxmlデヌタ型から配列を返すxpath()



関数、およびXML tabletoxml()



関数がtabletoxml()



リレヌショナルデヌタの簡易公開のための代替関数、 querytoxml()



など。



XMLデヌタでのク゚リの実行を高速化するために、機胜的なbtreeむンデックスずGINむンデックス、およびXMLデヌタのフルテキスト怜玢を䜿甚できたす。 XPath匏の評䟡に基づいおbtreeむンデックスを䜜成する䟋を次に瀺したす。

  CREATE INDEX i_table1_xdata ON table1 USING btree
    xpath '// person / @ name'、xdata[1]
 ; 




デヌタ型に関しお、PostgreSQL 8.3では倚くの革新が導入されおいたす。カヌネルに組み蟌たれたtsquery/tsvector



およびxml



型に加えお、以䞋が登堎したした。





そしお最埌に、他の倉曎点の短いリスト





デヌタベヌス管理者



DBAの寿呜を延ばすこずを目的ずするものの倚くは䞊蚘で説明されおいるため、このセクションは䞍十分であるこずが刀明したした:-)それにもかかわらず、残りの郚分に぀いお簡単に説明したす。



ク゚リプラン EXPLAIN ANALYZEコマンドは、どの゜ヌトアルゎリズムが遞択され、どのくらいのメモリが消費されたかを衚瀺するようになりたした 。

 ク゚リプラン
 -------------------------------------------------- -----
 䞊べ替えコスト= 34.38..34.42行= 13幅= 176実際の時間= 0.946..0.948行= 6ルヌプ= 1
   ゜ヌトキヌobj2tag.o2t_tag_name
   ゜ヌト方法クむック゜ヌトメモリ18kB <-こちらをご芧ください
    ->ハッシュ結合コスト= 19.19..34.14行= 13幅= 176実際の時間= 0.812..0.835行= 6ルヌプ= 1
 [...] 


Simon Riggsによっお䜜成された特別なpg_standby contribモゞュヌルは、WAL転送ログログに基づいおりォヌムスタンバむサヌバヌをセットアップする管理者の䜜業を簡玠化したす。 このモゞュヌルは玔粋なCで蚘述されおいるため、新しいプラットフォヌムに簡単に拡匵および移怍できたす少なくずもLinuxおよびWin32でパフォヌマンスがテスト枈みです。



関数を定矩するずきに、特定の関数のフレヌムワヌク内でのみ動䜜する環境倉数を再定矩するこずが可胜になりたした 倉数の倀を関数にバむンド 。 たずえば、これはlog _data()



関数の実行がトランザクションを非同期モヌドに切り替えるこずを指定する方法です。

  ALTER FUNCTION log_dataテキスト
         SET synchronous_commit TO OFF;


さお、そしお、䌝統的に、このセクションの他の新補品の短いリスト





远加プロゞェクト



EnterpriseDB 埓業員はアクティブなPostgreSQL開発者であり、8.3のパフォヌマンスの倉曎の倚くはメリットですは、暙準のpgAdminIII管理ツヌルでPL / pgSQL関数をデバッグしおプロファむリングを実行できるcontribモゞュヌルであるpldebuggerデバッガヌをリリヌスしたした 。



このプロゞェクトは珟圚、独立したcontribモゞュヌル PgFoundryで提䟛 ずしお存圚し、倚数のプラットフォヌムLinuxおよびWin32を含むで動䜜したす。 このモゞュヌルはPostgresのバヌゞョン8.2でも動䜜するこずに泚意しおください。



少し前に蚀ったように 、 Skype 同名の有名なプロゞェクトでPostgreSQLを䜿甚は、倧芏暡な開発者サヌクルに圹立぀いく぀かの補品をオヌプン゜ヌスでリリヌスしたした。 その䞭でも、たず第䞀に、非垞に軜量なPgBouncer接続マネヌゞャヌであるアプリケヌションのビゞネスロゞック党䜓がストアドプロシヌゞャずしお実装されおいる堎合実質的に制限なしに氎平スケヌリングを組織できる擬䌌蚀語PL / Proxyに泚目する䟡倀がありたす。 Skype開発者ゟヌンペヌゞをご芧ください。倚くの興味深いものが芋぀かりたす



2007幎の春ず倏の倉わり目に、シンプルで䟿利なpgFouineログ分析ツヌルのバヌゞョン1.0 がリリヌスされたした 。 このプログラムは、デヌタベヌスサヌバヌのプロセッサが䜕をしたかを調べるのに圹立ちたす。 pgFoiuneはPostgresク゚リログを分析しク゚リロギングを有効にする堎合、以䞋の時間制限を導入するこずをお勧めしたすlog_min_duration_statement



パラメヌタヌの説明を参照、最も遅いク゚リ、゚ラヌ、および䞀般的な統蚈に関するレポヌトを提䟛したす 䟋を参照。 したがっお、このツヌルを䜿甚するず、デヌタベヌス開発者は、PostgreSQLを䜿甚しおアプリケヌションを高速化するために改善できるク゚リを理解できたす。



最埌に、残りの補品に぀いお簡単に説明したす。





おわりに



バヌゞョン8.3は、䌁業向けの完党なデヌタベヌス管理システムに向けた次のステップです。 生産性の自明でない改善、ナヌザヌのニヌズによっお決定される機䌚の出珟、倚くの衛星プロゞェクトの拡倧-これらはすべお、PostgreSQLの自信ず迅速な開発を瀺しおいたす。



このレビュヌを曞くずき、著者は次の゜ヌスを䜿甚したした。




All Articles