Postgre sql9.3新機能紹介

8,808 views
8,588 views

Published on

日本PostgreSQLユーザ会(JPUG)主催の夏セミナーで行った『PostgreSQL9.3新機能紹介』の講演資料です。

Published in: Technology
0 Comments
13 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
8,808
On SlideShare
0
From Embeds
0
Number of Embeds
665
Actions
Shares
0
Downloads
80
Comments
0
Likes
13
Embeds 0
No embeds

No notes for slide

Postgre sql9.3新機能紹介

  1. 1. Copyright © 2013 NTT DATA Corporation2013年6月22日NTTデータ 藤井雅雄、江川大地PostgreSQL9.3新機能紹介
  2. 2. 2Copyright © 2013 NTT DATA CorporationWho are you?藤井雅雄(@fujii_masao)所属:株式会社NTTデータPostgreSQLは2008年からやってます。ここ最近は、PostgreSQL関係のR&D、GresCube開発に関わっています。最近、コミッターになりました。6/10にFirstCommit !!江川大地(@daiti0804)です。所属:株式会社NTTデータPostgreSQLは2011年からやってます。ここ最近はもっぱらマイグレーションに従事。最近、職場にインド人がやってきました。ベジタリアン向けのレストランがありましたら教えてください。
  3. 3. 3Copyright © 2013 NTT DATA CorporationINDEXPostgreSQLのこれまでと現在 PostgreSQLのこれまでの進化 PostgreSQL9.2の振り返りPostgreSQL のこれから…9.3のお話 開発に役立つ新機能 運用に役立つ新機能 ちょっぴり注意! 非互換について付録(時間があったら…) 続・ちょっぴり注意! 非互換について 9.4でもアツい機能がゾクゾクと! 紹介しきれなかった9.3新機能
  4. 4. Copyright © 2013 NTT DATA Corporation 4PostgreSQLのこれまでと現在
  5. 5. 5Copyright © 2013 NTT DATA CorporationPostgreSQLの歩みPostgreSQL最新版は9.2.4(2013/4/4 リリース)2005-20092010-8系9系Functionality and Performance…運用性の向上とSQLの進化による性能向上replication and extensibility…レプリケーションの導入と更なる拡張Foundations and Durability…PostgreSQLの基礎が完成7系 2000-20059.3開発中
  6. 6. 6Copyright © 2013 NTT DATA CorporationPostgreSQLの歩み~9系を振り返る2011201220139.09.19.2同期レプリケーションUNLOGGED TABLESQL/MEDカスケードレプリケーションIndexOnlyScanスケーラビリティ向上2010非同期レプリケーションホットスタンバイSQL構文強化8系-20099.3Viewの改良postgresql_fdwFast promote ..etc開発中PostgreSQL最新版は9.2.4(2013/4/4 リリース)
  7. 7. 7Copyright © 2013 NTT DATA CorporationPostgreSQL9.2の振り返り 性能向上 CPUスケーラビリティの向上その他の新機能 インデックスオンリースキャン カスケードレプリケーション JSON型 レンジ型などなど…PostgreSQL9.2の最大の特徴は、性能向上でした。
  8. 8. 8Copyright © 2013 NTT DATA CorporationCPUスケーラビリティの向上参照時の軽量ロックが改良され、参照処理性能が大幅にアップ!メニーコアの環境で更なるパフォーマンスの発揮が期待されます論理コア64以上では、9.1の実に3倍以上のスループットを実現!どんとこい!メニーコアPgCon 2012Robert Haas 発表資料 (2012/5/18) より
  9. 9. 9Copyright © 2013 NTT DATA Corporationカスケードレプリケーションシングルマスタマルチスタンバイ マルチスタンバイ複製 複製更新SQL参照SQL参照SQL参照SQL シングルマスタ-マルチスタンバイのレプリケーション同期/非同期やカスケードレプリケーションなどが利用可能スタンバイで参照SQLを実行して負荷分散スタンバイからのバックアップを取得可能!バックアップ低負荷なスタンバイから取得!
  10. 10. Copyright © 2013 NTT DATA Corporation 10PostgreSQL のこれから…9.3のお話
  11. 11. 11Copyright © 2013 NTT DATA CorporationPostgreSQL9.3のFAQQ1. PostgreSQL9.3の特徴を一言でいうと?A1. “Ease of Use” by Robert Treat開発者向けの新機能が充実し、よりPostgreSQLを使いやすくなりました!Q2. PostgreSQL9.3はいつ出るの?A2. 9月ごろのリリースが予想されています!Q3.PostgreSQL9.3の目玉機能は?A3. Materialized Views, Updatable Views, FDWなどなどQ4. 他にはどんな機能があるの?A4. それは次のページから…
  12. 12. Copyright © 2013 NTT DATA Corporation 12開発に役立つ新機能!
  13. 13. 13Copyright © 2013 NTT DATA CorporationVIEWの進化PostgreSQL9.3ではViewがパワーアップ!! Updatable Viewsで、Viewの更新が可能に! Materialized Viewsで、よく使う結果を高速に返却!
  14. 14. 14Copyright © 2013 NTT DATA CorporationVIEWの進化PostgreSQL9.3ではViewがパワーアップ!! Updatable Viewsで、Viewの更新が可能に! Materialized Viewsで、よく使う結果を高速に返却!
  15. 15. 15Copyright © 2013 NTT DATA CorporationUpdatable Views(更新可能ビュー) 9.2までのViewは参照専用SELECTのみ受付、更新系のDMLはエラーとなる。更新系の処理を行うにはトリガやルールを作る必要があり。Col1 Col2 COl31 AA 1002 BB 200…元テーブル9.2までCol1 Col21 AA2 BB…更新可能ビューView作成 + 複雑なトリガ(or 複雑なルール)面倒 !大変 !
  16. 16. 16Copyright © 2013 NTT DATA CorporationUpdatable Views(更新可能ビュー) 9.3では通常のView定義だけで、更新可能ビューに!Viewへの更新系DMLが実行できる!更新系DMLによって、元テーブルへの更新が行われる!9.3 !Col1 Col2 COl31 AA 1002 BB 200…元テーブル9.2まで9.3からCol1 Col21 AA2 BB…更新可能ビューCol1 Col2 COl31 AA 1002 BB 200…元テーブルCol1 Col21 AA2 BB…更新可能ビューView作成 + 複雑なトリガ(or 複雑なルール)View作成だけ!面倒 !大変 !楽チン !
  17. 17. 17Copyright © 2013 NTT DATA CorporationUpdatable Views(更新可能ビュー) Updatable Viewsの使い道 商用DBMSからのマイグレーションでシノニムの代替に。 複雑な更新は…?? Updatable Viewsの注意点 複雑なView定義では更新できませんFROM句には、1つのテーブル or 更新可能ビューが記述されていること。Viewの定義の最上位レベルにWITH, DISTINCT, GROUP BY, HAVING, LIMIT,OFFSET句が使われていないこと。Viewの定義の最上位レベルにUNION, INTERSECT, EXCEPT句が使われていないこと。View作成時のSELECT文で、式、リテラル、関数を使用していないこと。View作成時のSELECT文に同じカラムが二度登場しないこと。ViewがSECURITY_BARRIER 属性を持っていないこと。(PostgreSQL9.3 beta1マニュアルより勝手に翻訳)→単純な1テーブルについてのViewとして使用可能
  18. 18. 18Copyright © 2013 NTT DATA CorporationUpdatable Views(更新可能ビュー) Updatable Viewsの使い道 商用DBMSからのマイグレーションでシノニムの代替に。 複雑な更新は…?? Updatable Viewsの注意点 複雑なView定義では更新できませんFROM句には、1つのテーブル or 更新可能ビューが記述されていること。Viewの定義の最上位レベルにWITH, DISTINCT, GROUP BY, HAVING, LIMIT,OFFSET句が使われていないこと。Viewの定義の最上位レベルにUNION, INTERSECT, EXCEPT句が使われていないこと。View作成時のSELECT文で、式、リテラル、関数を使用していないこと。View作成時のSELECT文に同じカラムが二度登場しないこと。ViewがSECURITY_BARRIER 属性を持っていないこと。(PostgreSQL9.3 beta1マニュアルより勝手に翻訳)→単純な1テーブルについてのViewとして使用可能
  19. 19. 19Copyright © 2013 NTT DATA CorporationViewの進化PostgreSQL9.3ではViewがパワーアップ!! Updatable Viewsで、Viewの更新が可能に! Materialized Viewsで、よく使う結果を高速に返却!
  20. 20. 20Copyright © 2013 NTT DATA CorporationMaterialized Views Materialized Viewsって?(通常のViewとの違い)クエリの結果がキャッシュされた実体のあるView通常のViewは出力結果の形(見え方)を定義するのみで、SQL実行時に逐次、元テーブルへアクセスが必要。Col1 Col21 AA2 BB…Col1 Col212 AA33 BB…Col1 Col2…Viewsum_tbl通常のViewの場合CREATE VIEW sum_tblASSELECT Col1, Col2…;
  21. 21. 21Copyright © 2013 NTT DATA CorporationMaterialized Views Materialized Viewsって?(通常のViewとの違い)クエリの結果がキャッシュされた実体のあるView通常のViewは出力結果の形(見え方)を定義するのみで、SQL実行時に逐次、元テーブルへアクセスが必要。Col1 Col21 AA2 BB…Col1 Col212 AA33 BB…Col1 Col212 AA66 BB…Viewsum_tbl通常のViewの場合SELECT Col1, Col2…;
  22. 22. 22Copyright © 2013 NTT DATA CorporationMaterialized Views Materialized Viewsって?(通常のViewとの違い)クエリの結果がキャッシュされた実体のあるView通常のViewは出力結果の形(見え方)を定義するのみで、SQL実行時に逐次、元テーブルへアクセスが必要。Col1 Col21 AA2 BB…Col1 Col212 AA33 BB…Col1 Col212 AA66 BB…Materialized Viewsum_tblMaterialized Viewsの場合CREATE MATERIALIZEDVIEW sum_tbl ASSELECT …;View作成時に、結果をあらかじめキャッシュ
  23. 23. 23Copyright © 2013 NTT DATA CorporationMaterialized Views Materialized Viewsって?(通常のViewとの違い)クエリの結果がキャッシュされた実体のあるView通常のViewは出力結果の形(見え方)を定義するのみで、SQL実行時に逐次、元テーブルへアクセスが必要。 Materialized Viewsのメリットは?結果集計、複雑なクエリ、頻発する演算の結果が高速に!集計結果に頻繁にアクセスするシステムに重宝するCol1 Col21 AA2 BB…Col1 Col212 AA33 BB…Col1 Col212 AA66 BB…Materialized Viewsの場合早い!結果だけを検索するので高速かつシンプルなSQL!Materialized Viewsum_tbl
  24. 24. 24Copyright © 2013 NTT DATA CorporationMaterialized Views PostgreSQL9.3のMaterialized Viewsの注意点一般的なDBMSのMVに比べると作りはかなり簡素自動リフレッシュ機能がない–変更のたびにリフレッシュ、定期的にリフレッシュする機能がない–トリガやcronで代替高速リフレッシュ機能がない–差分だけをリフレッシュできない–Exclusive Lockが必要になるので、リフレッシュのタイミングは要注意→元テーブルが頻繁に変わる場合や常に正確な結果が求められる場合は採用するか慎重な検討が必要
  25. 25. 25Copyright © 2013 NTT DATA CorporationMaterialized Views PostgreSQL9.3のMaterialized Viewsの注意点一般的なDBMSのMVに比べると作りはかなり簡素自動リフレッシュ機能がない–変更のたびにリフレッシュ、定期的にリフレッシュする機能がない–トリガやcronで代替高速リフレッシュ機能がない–差分だけをリフレッシュできない–Exclusive Lockが必要になるので、リフレッシュのタイミングは要注意→元テーブルが頻繁に変わる場合や常に正確な結果が求められる場合は採用するか慎重な検討が必要これらの解決策は、9.4に向けて活発に議論中
  26. 26. 26Copyright © 2013 NTT DATA CorporationPostgreSQL9.2から登場 !JavaScriptにおけるオブジェクトの表記法をベースとした人にもマシンにも扱いやすいデータ記述言語。{"id":1,"name":"鈴木","address":"東京","birth_day":"1970-01-01“}何ができる? 使いどころJSON型 JSON型データを格納可。行や配列をJSON型に変換可。ただし、JSON型に対する演算は不可。インデックスも無し。JSON型を扱うミドルの中継。リレーショナルデータのJSON変換。取り扱います !JSONの正規フォーマットデータCREATE TABLE tbl(json_data json);JSON型key value
  27. 27. 27Copyright © 2013 NTT DATA CorporationJSON型がより使いやすくJSON型用の演算子、関数が充実!9.2まではJSONの複雑な関数や演算子がなかった演算子を使用してデータを取得できるようになりました。演算子 何ができる? 例-> JSON型の配列に入っている値、オブジェクトを返す。SELECT [1,2,3]::json -> 0;SELECT {"a": 1, "b": 2, "c": 3}::json -> b;->> JSON型の配列に入っている値、オブジェクトをTEXT型として返す。SELECT ‘[1,2,3]::json ->> 0;SELECT {"a": 1, "b": 2, "c": 3}::json ->> b;#> パスを使用してJSON型のオブジェクトを返す。SELECT {"a": 1, "b": 2, "c": [1,2,3]}::json #>{c, 0};#>> パスを使用してJSON型のオブジェクトをTEXT型として返す。SELECT {"a": 1, "b": 2, "c": [1,2,3]}::json #>{c, 0};
  28. 28. 28Copyright © 2013 NTT DATA CorporationJSON型がより使いやすく関数 何ができる?to_json 引数の要素をJSON型として返すjson_array_length JSON配列のもっとも外側にある要素が何番目なのか返すjson_each JSON型のデータをkey(TEXT型)とvalue(JSON型)をペアとして返すjson_each_text JSON型のデータをkey(TEXT型)とvalue(TEXT型)をペアとして返すjson_extract_path pathで指定したJSONオブジェクト(keyとvalue)をJSON型として返す。json_extract_path_text pathで指定したJSONオブジェクト(keyとvalue)をTEXT型として返す。json_object_keys JSONオブジェクトのkeyを返す。json_populate_record JSON型のvalueを任意のデータ型として返す。json_populate_recordset 複数のJSON型のvalueを任意のデータ型として返す。json_array_elements JSON配列をJSON型のセットとして返す。JSON型用の演算子、関数が充実!9.2まではJSONの複雑な関数や演算子がなかった演算子を使用してデータを取得できるようになりました。関数の数も2個(9.2)→12個(9.3)へ増加!
  29. 29. 29Copyright © 2013 NTT DATA CorporationPostgreSQL(ローカル)contrib/postgres_fdwリモートのPostgreSQLのテーブルをローカルのテーブルとして扱える! 従来のdblinkと同様の用途で、かつシンプルに処理を行える WHERE句のプッシュダウンが可能 リモートから必要なデータだけを取得 IMMUTABLE(常時結果が同じとなる)な組み込みの演算子や関数限定 Writable-FDWを生かし、リモートテーブルへの更新処理もサポート ローカルのトランザクションと連動して、リモートでも自動的にコミット/アボートを実施!Col1 Col21 AA2 BB…PostgreSQL(リモート)Col1 Col21 AA2 BB…FDWテーブル 元テーブル自動で接続WHERE句条件をリモートに渡して参照/更新トランザクションも可参照/更新結果セットの返却結果返却
  30. 30. 30Copyright © 2013 NTT DATA CorporationPostgreSQL(ローカル)contrib/postgres_fdw例えばこんな用途に ローカルには頻繁にアクセス(低レイテンシを期待)するデータ、リモートにはたまにアクセス(高レイテンシも許容)するデータをそれぞれ配置 使用頻度を加味してノード分散するなどの工夫が可能 ただし、パーティショニングの子テーブルに外部表を指定できないCol1 Col2101 AA102 BB…PostgreSQL(リモート)多用するデータCol1 Col21 AA…たまに使うデータCol1 Col21 AA2 BB…PostgreSQL(リモート)Col1 Col2101 AA102 BB…Col1 Col21 AA…たまに使うデータCol1 Col2…親テーブル継承可継承不可
  31. 31. Copyright © 2013 NTT DATA Corporation 31運用に役立つ新機能!
  32. 32. 32Copyright © 2013 NTT DATA Corporation高速フェイルオーバ故障検知共有ディスク切替リカバリチェックポイント共有ディスク故障検知リカバリチェックポイント故障検知リカバリ 9.3~9.2フェイルオーバ時間を大幅に短縮! 実行に長時間かかるチェックポイントをスキップ
  33. 33. 33Copyright © 2013 NTT DATA Corporation故障検知をすぐに新しいタイムアウトパラメータ wal_receiver_timeout でスタンバイはすぐにマスタ故障を検知!(*) replication_timeout は wal_sender_timeout に改名スタンバイ故障の検知• tcp_keepalives_idle• tcp_keepalives_interval• tcp_keepalives_count• replication_timeoutマスタ故障の検知• keepalives_idle• keepalives_interval• keepalives_countマスタ 故障故障 スタンバイ9.2
  34. 34. 34Copyright © 2013 NTT DATA Corporation故障検知をすぐに新しいタイムアウトパラメータ wal_receiver_timeout でスタンバイはすぐにマスタ故障を検知!(*) replication_timeout は wal_sender_timeout に改名スタンバイ故障の検知• tcp_keepalives_idle• tcp_keepalives_interval• tcp_keepalives_count• replication_timeout• wal_sender_timeout マスタ故障の検知• keepalives_idle• keepalives_interval• keepalives_count• wal_receiver_timeoutマスタ 故障故障 スタンバイ9.3
  35. 35. 35Copyright © 2013 NTT DATA Corporationカスケードレプリケーションの運用性向上マスタ スタンバイスタンバイバックアップアーカイブカスケードレプリケーションのフェイルオーバ時にバックアップや共有アーカイブが不要に!停止 マスタ スタンバイ停止 マスタ スタンバイ停止 マスタ スタンバイ通常時マスタ昇格直後フェイルオーバ後再開準備中マスタ故障によりスタンバイがマスタに昇格レプリケーション再開9.2面倒!大変!イケテナイ!
  36. 36. 36Copyright © 2013 NTT DATA Corporationカスケードレプリケーションの運用性向上マスタ スタンバイスタンバイカスケードレプリケーションのフェイルオーバ時にバックアップや共有アーカイブが不要に!停止 マスタ スタンバイ停止 マスタ スタンバイ通常時マスタ昇格直後フェイルオーバ後マスタ故障によりスタンバイがマスタに昇格楽チン!時間もかからない!レプリケーション再開9.3
  37. 37. 37Copyright © 2013 NTT DATA CorporationファイルシステムDB CLOG WALストレージやファイルシステムで破損検知レイアウトが壊れていないかで破損検知CRC 特別な機構で破損検知DB共有バッファ~9.2データページチェックサムデータページにチェックサムを付けて、ページの破損をすぐに検知! 早急な破損検知が非常に重要破損がクエリ結果の誤りやクラッシュを招く破損がバックアップやスタンバイに伝搬して、永遠に復旧できない事態も initdb -k (or --data-checksums) 性能への影響が大きいことに注意
  38. 38. 38Copyright © 2013 NTT DATA CorporationファイルシステムDB CLOG WALCRCDB共有バッファチェックサムチェックサムチェックサムの付与・更新ストレージやファイルシステムで破損検知レイアウトが壊れていないかで破損検知特別な機構で破損検知9.3チェックサムの妥当性確認データページチェックサムデータページにチェックサムを付けて、ページの破損をすぐに検知! 早急な破損検知が非常に重要破損がクエリ結果の誤りやクラッシュを招く破損がバックアップやスタンバイに伝搬して、永遠に復旧できない事態も initdb -k (or --data-checksums) 性能への影響が大きいことに注意
  39. 39. 39Copyright © 2013 NTT DATA CorporationイベントトリガDDLにトリガを仕掛けられる! 9.2以前では、トリガを仕掛けられるのはINSERT/UPDATE/DELETE/TRUNCATEのみ 9.3以降では、CREATE/ALTER/DROPのDDLにトリガを定義可能。トリガ発動条件は、ddl_command_start: DDL開始時ddl_command_end : DDL終了時sql_drop : DROPやALTER TABLE実行時。対象オブジェクトを指定可能クレバーなDBA空き領域(小)DDL開始時に空き領域を確認するイベントトリガ十分な空き領域がないのにDDLを実行して、ディスクフルになるのは勘弁してほしい・・・そうだ!!DDL開始時にイベントトリガを仕掛けよう!オペレータALTER TABLEしよう♪
  40. 40. 40Copyright © 2013 NTT DATA Corporationパラレルpg_dumpテーブル1テーブル2テーブル3ワーカーバックアップワーカー1ワーカー2テーブル1テーブル2テーブル3pg_dump pg_restore –j 2~9.2pg_dumpのパラレル実行で、バックアップ時間を大幅に短縮! メニーコアでテーブル数が多いときに力を発揮 トランザクション的に整合性のあるバックアップを取得できる スタンバイでは実行できない パラレル数+1の接続を使うことに注意
  41. 41. 41Copyright © 2013 NTT DATA Corporationパラレルpg_dumpテーブル1テーブル2テーブル3ワーカー1ワーカー2ワーカー3マネージャバックアップワーカー1ワーカー2テーブル1テーブル2テーブル3pg_dump –j 3 pg_restore –j 29.3pg_dumpのパラレル実行で、バックアップ時間を大幅に短縮! メニーコアでテーブル数が多いときに力を発揮 トランザクション的に整合性のあるバックアップを取得できる スタンバイでは実行できない パラレル数+1の接続を使うことに注意
  42. 42. 42Copyright © 2013 NTT DATA Corporationpg_isreadyDBサーバpostmasterプロセスが存在するか?pg_ctl statusリモートSQLの実行が成功するか?"SELECT 1"PostgreSQLの稼働状況をお手軽に確認できるクライアントツール$ pg_isready -h <ホスト名> -p <ポート番号>$ echo $?0 : 正常応答 2 : 応答なし1 : 接続拒否 3 : パラメータ不正~9.2
  43. 43. 43Copyright © 2013 NTT DATA Corporationpg_isreadyDBサーバpostmasterプロセスが存在するか?pg_ctl statusリモートSQLの実行が成功するか?"SELECT 1"pg_isreadyPostgreSQLの稼働状況をお手軽に確認できるクライアントツール$ pg_isready -h <ホスト名> -p <ポート番号>$ echo $?PostgreSQLに接続できるか?9.30 : 正常応答 2 : 応答なし1 : 接続拒否 3 : パラメータ不正
  44. 44. 44Copyright © 2013 NTT DATA Corporationpg_isready 確認方法により、稼働状況の見え方が異なるため注意pg_ctl status SQL実行 pg_isready稼働状況の確認方法postmasterプロセスが存在するか?SQLの実行が成功するか?PostgreSQLに接続できるか?正常稼働中 稼働 稼働 稼働停止後 停止 停止 停止起動中(リカバリ中) 稼働 停止 停止(拒否)停止中 稼働 停止 停止(拒否)接続権限なし(*1) 稼働 停止 稼働同時接続数フル 稼働 停止 稼働(*1) pg_hba.confで接続が許可されていない場合など
  45. 45. 45Copyright © 2013 NTT DATA Corporationちょっぴり注意!非互換について…………0000000100000000000000FD0000000100000000000000FE000000010000000100000000000000010000000100000001……………………0000000100000000000000FD0000000100000000000000FE0000000100000000000000FF000000010000000100000000000000010000000100000001…………WALファイル名/アーカイブファイル名の末尾に注意 運用スクリプトなどで、WALファイル名やアーカイブファイル名をもとにファイル取得や削除を制御している場合は、影響がないか確認しましょう!~9.2 9.3
  46. 46. 46Copyright © 2013 NTT DATA CorporationまとめQ1. PostgreSQL9.3の特徴は?A1. “Ease of Use” by Robert Treat開発者・運用者向けの新機能が充実!Q2. PostgreSQL9.3はいつ出るの?A2. 9月ごろのリリースが予想されています!
  47. 47. Copyright © 2011 NTT DATA CorporationCopyright © 2013 NTT DATA CorporationCopyright © 2011 NTT DATA CorporationCopyright © 2013 NTT DATA Corporationご清聴ありがとうございました!!
  48. 48. Copyright © 2013 NTT DATA Corporation 4Copyright © 2013 NTT DATA Corporation 4付録
  49. 49. 49Copyright © 2013 NTT DATA Corporationちょっぴり注意!非互換について被参照ID NAME1 東京2 大阪3 沖縄参照ID NAME1 東京2 大阪被参照ID NAME1 東京2 京都3 沖縄参照ID NAME1 東京2 (NULL)~9.2 UPDATE 被参照SET NAME=‘京都’WHERE ID=2被参照で更新した列のみがSET NULL/DEFAULTの対象IDとNAME列で外部キー制約外部キーのON UPDATE SET NULL/DEFAULTの挙動が変化 9.2以前では、更新列のみがSET NULL/DEFAULTの対象 9.3以降では、外部参照している列全体がSET NULL/DEFAULTの対象
  50. 50. 50Copyright © 2013 NTT DATA Corporationちょっぴり注意!非互換について外部キーのON UPDATE SET NULL/DEFAULTの挙動が変化 9.2以前では、更新列のみがSET NULL/DEFAULTの対象 9.3以降では、外部参照している列全体がSET NULL/DEFAULTの対象被参照ID NAME1 東京2 大阪3 沖縄参照ID NAME1 東京2 大阪被参照ID NAME1 東京2 京都3 沖縄参照ID NAME1 東京(NULL) (NULL)UPDATE 被参照SET NAME=‘京都’WHERE ID=2IDとNAME列で外部キー制約外部参照している列全体がSET NULL/DEFAULTの対象9.3
  51. 51. 51Copyright © 2013 NTT DATA Corporationカスケードレプリケーションの運用性向上マスタ スタンバイスタンバイバックアップアーカイブカスケードレプリケーションのフェイルオーバ時にバックアップや共有アーカイブが不要に!停止 マスタ スタンバイ停止 マスタ スタンバイ停止 マスタ スタンバイ通常時マスタ昇格直後フェイルオーバ後再開準備中マスタ故障によりスタンバイがマスタに昇格レプリケーション再開9.2面倒!大変!イケテナイ!TLI=1 TLI=1 TLI=1TLI=2 TLI=1TLI=2 TLI=2
  52. 52. Copyright © 2013 NTT DATA Corporation 529.4でもアツい機能がゾクゾクと!
  53. 53. 5Copyright © 2013 NTT DATA Corporationパラレルクエリ パラレルpg_dumpなど、今パラレル化がアツい! 現状1クエリは1プロセス(1コア)でしか処理できないため、CPU数を増やしても1クエリの性能は上がらない 目標パラレルクエリ(1クエリを複数プロセスでパラレルに処理して、性能向上させる機能)のサポート 開発の方向性パラレルクエリを実装するのは非常に難しいため、まずはパラレルソートやインデックス作成のパラレル化から徐々に取り組む
  54. 54. 54Copyright © 2013 NTT DATA Corporation8 16 32 64スループットPostgreSQL9.2PostgreSQL9.1CPUコア数(論理)更新性能のスケールアップ更新時のトランザクションログ生成時のロックが改良され、更新処理性能が大幅にアップ!9.3の実に3倍以上のスループットを実現!メニーコア高速ディスク任せろ!6432168v9.4v9.3※イメージ図
  55. 55. 55Copyright © 2013 NTT DATA Corporationレプリケーションレプリケーションの運用性向上マスタ スタンバイ停止 マスタマスタスタンバイレプリケーション停止 マスタバックアップ両系稼働マスタ単独稼働両系稼働バックアップ転送フェイルバック時にバックアップが不要に!マスタ故障によりフェイルオーバ旧マスタの再組込み(フェイルバック)9.3面倒!大変!時間かかりすぎ!
  56. 56. 56Copyright © 2013 NTT DATA Corporationレプリケーションレプリケーションの運用性向上マスタ スタンバイマスタスタンバイレプリケーション両系稼働 両系稼働フェイルバック時にバックアップが不要に!マスタ故障によりフェイルオーバ旧マスタの再組込み(フェイルバック)停止 マスタマスタ単独稼働9.4楽チン!時間もかからない!
  57. 57. Copyright © 2013 NTT DATA Corporation 57紹介しきれなかった9.3新機能
  58. 58. 58Copyright © 2013 NTT DATA Corporation64bit API Large-Objectラージオブジェクトの最大サイズが2GB -> 4TBへ!商用DBMSからの移行障壁が少しは下がる・・?9.3 !ラージオブジェクト~ 4TB9.2 ..余裕!つらい!
  59. 59. 59Copyright © 2013 NTT DATA Corporationlock_timeout ロック待機時間に応じてクエリをキャンセルできるようになりました。従来はstatement_timeoutでカバーしていました• この方法では、ロック待機時間 + 実際の処理時間 を考慮するため、厳密にはロック待機時間のキャンセルではありませんでした。指定方法はパラメータ値の設定SQL個別の指定時は、直前にSET文を指定すること!SELECT * FROM tbl WHERE c1=xxx FORUPDATE WAIT 10;-- Previously “SET statement_timeout = 10000;”SET lock_timeout = 10000;SELECT * FROM tbl WHERE c1=xxx FOR UPDATE ;OraclePostgreSQL
  60. 60. 60Copyright © 2013 NTT DATA Corporationlock_timeout こぼれ話 実は、PostgreSQLの内部的なtimeout frameworkが大きく改善されており、ユーザ定義のTimeout処理を設けやすくなっています。コア開発時には要チェックです! http://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=f34c68f09671c4566854c7e20e9253d4f335c0b0 src/include/utils/timeout.h をよく見ておきましょう! イベント(DEADLOCK_TIMEOUT、 STANDBY_TIMEOUTなど)ごとにTimeoutIDが定められました。 ユーザ独自定義用に使えるIDもあります。(USER_TIMEOUT) RegisterTimeout(TimeoutId id, timeout_handler handler)で登録 後は用意されたAPIとアクセサを使って制御します
  61. 61. 61Copyright © 2013 NTT DATA CorporationLATERAL サポート 副問い合わせやFROM句での関数利用が捗ります 副問い合わせなどでは、副問い合わせ外の条件やテーブルなどは見えません LATERALにより、そのスコープを外に広げることができます。=# SELECT * FROM lt,(SELECT * FROM rt WHERE lt.c1 = rt.c1)s WHERE lt.c1 < 100;ERROR: subquery in FROM cannot refer to other relations of same query level=# SELECT * FROM lt,LATERAL (SELECT * FROM rt WHERE lt.c1 = rt.c1)s WHERE lt.c1 < 100;c1 | c2 | c1 | c2----+----+----+----・・・・・OK!9.2まで9.3から
  62. 62. 62Copyright © 2013 NTT DATA CorporationCOPY TO STDOUT/FROM STDIN PROGRAM FILTER COPYコマンドの出力元/先にPROGRAMを指定できます!通常、COPYコマンドはファイルからロード、ファイルへアンロード今回は標準入出力前にプログラムを指定可能に!ロードデータの圧縮/解凍やクレンジングに一役買いますCOPY tbl TO PROGRAM ‘ gzip > /tmp/dump.gz’;Tblgzipdump.gzedit_tblmy_dump my_editCOPY edit_tbl FROM PROGRAM ‘ my_edit /tmp/my_dump’;処理前 処理後圧縮前圧縮後
  63. 63. Copyright © 2013 NTT DATA Corporation 63付録の付録
  64. 64. 64Copyright © 2013 NTT DATA CorporationPostgreSQLの歩み~8系から2011201220139.09.19.2同期レプリケーションUNLOGGED TABLESQL/MEDカスケードレプリケーションIndexOnlyScanスケーラビリティ向上2010非同期レプリケーションホットスタンバイSQL構文強化8.0Windows対応PITR 機能テーブルスペース20059.3Viewの改良postgresql_fdwFast promote ..etc開発中PostgreSQL最新版は9.2.4(2013/4/4 リリース)8.4Window関数・再帰クエリVACUUM用メモリ自動管理他DBMS互換性向上8.3HOT: 更新性能向上VACUUM自動化全文テキスト検索200820098.2pgcryptohstore20078.12009autovacuumロール

×