Jjugccc2017spring-postgres-ccc_m1

353 views

Published on

2017年5月20日 JJUG CCC 2017 springの登壇資料です。

Published in: Engineering
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
353
On SlideShare
0
From Embeds
0
Number of Embeds
29
Actions
Shares
0
Downloads
1
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Jjugccc2017spring-postgres-ccc_m1

  1. 1. PostgreSQLで学ぶ データベース技術 Javaエンジニアのための PostgreSQLステップアップ JJUG CCC 2017 Spring 2017.5.20 NPO法人 日本PostgreSQLユーザ会 株式会社アシスト 喜田 紘介
  2. 2. 自己紹介 Japan PostgreSQL User's Group 2 postgres=# ¥x auto postgres=# SELECT * FROM “自己紹介” postgres -# WHERE name = ‘喜田紘介’; -[ RECORD 1 ] 名前 | 喜田 紘介 twitter | @kkkida_twtr blog | http://kkida-galaxy.blogspot.jp/ 所属1 | NPO法人 日本PostgreSQLユーザ会 所属2 | 株式会社 アシスト 仕事 | PostgreSQLを中心としたDB技術支援、教育、サポート、プリセールス | 活動に従事している。最近は、商用DBとの互換に優れたPostgreSQLの | 強化版「EDB Postgres」の検証、技術支援の確立、販促など。 | 国内でのPostgreSQL普及・促進を目指す、日本PostgreSQLユーザ会の | 理事としても活動し、全国各地での講演、技術相談、イベントの開催 | などに楽しさを見出している。 予備1 | B’z好き。カラオケ好き。ダイビング始めました。マラソン、テニス。 予備2 | このテーブル設計はイケてない!注意!
  3. 3. PostgreSQLで学ぶデータベース技術 Javaエンジニアの皆さまに知ってほしい、データベース の役割で大事なことをまとめました データにまつわる面倒なことは、データベースに任せて しまいましょう! Japan PostgreSQL User's Group 3 本日紹介すること  システムの中核を担うデータベース  Java + PostgreSQL  こんな相談はDBAへ 目次 JavaエンジニアのためのPostgreSQLステップアップ
  4. 4. DBAからDeveloperの皆様へ Japan PostgreSQL User's Group 4 知ってほしい事、聞いてみたい事を持ってきました! データベースに関わるメンバーの役割 アプリ開発者(Developer) ・データベースの利用者 ・プログラム(SQL)を書く ・パフォーマンスの改善 データベース管理者(DBA) Database Administrator ・データベースの運用管理を担当 ・DBの安定稼働を使命とする ・プログラムを書かない ・運用管理に必要なSQLは書く ・OSレベルの情報も見る ・必要に応じてメンテナンス操作を実施 ・オペレーター向け手順書の整備 オペレーター ・手順書に従って各種対応を行う ・データベースへの限られた操作 セキュリティ管理者 ・データベースには アクセスできない ・DBAや開発者による不正な 操作がないことを確認する ・監査情報に対する権限
  5. 5. PostgreSQLで学ぶデータベース技術 プログラムとデータの分離 リレーショナルデータベースで、データを 「高速に返す」「維持する」「守る」 Japan PostgreSQL User's Group 5  システムの中核を担うデータベース  Java + PostgreSQL  こんな相談はDBAへ JavaエンジニアのためのPostgreSQLステップアップ
  6. 6. プログラムとデータの分離 独自にデータを持つ場合 データベースで一元管理 Japan PostgreSQL User's Group 6 データベースによるデータ層の「抽象化」 My Program My Only Data 文字列 file配列 入力から 条件に合う データを探す 計算して (プログラム固有の処理) 画面を生成 My Program 計算して (プログラム固有の処理) 画面を生成 データベース データベースに 問い合わせ 他の プログラム 条件に合う データを探して 返却
  7. 7. プログラムとデータの分離 独自にデータを持つ場合 データベースで一元管理 Japan PostgreSQL User's Group 7 データベースによるデータ層の「抽象化」 My Program My Only Data 文字列 file配列 入力から 条件に合う データを探す 計算して (プログラム固有の処理) 画面を生成 My Program 計算して (プログラム固有の処理) 画面を生成 データベース データベースに 問い合わせ 他の プログラム 条件に合う データを探して 返却 Java Program JVM OS SQL
  8. 8. リレーショナルデータベースの機能 リレーショナルデータベース管理システム(RDBMS) RDBMSの機能イメージ Japan PostgreSQL User's Group 8 RDBMSにはこれだけ(こんなに)任せましょう! RDBMS PostgreSQL SQLSQLRDBMSの 共通操作言語 同時実行の実現 不正アクセスの禁止 結果を高速に 返却する データを 適切に維持 確定された データを守る
  9. 9. プログラムからDBを使う データベース製品の差異を吸収するJDBC Japan PostgreSQL User's Group 9 JavaではJDBCドライバを経由し、SQLを直接記述 RDBMSAPサーバー close() getConnection( ) JDBCドライバが提供する データベース操作クラス executeQuery( SELECT * FROM ~; ) SQLを自由に記述 ORM 処理に必要なテーブルの準備や、SQLを含めた データベース操作までを全てパッケージング JDBCで標準化されているため DB製品によらず共通 SQLで標準化されているため DB製品によらず共通 ただし、DB製品をちゃんと 勉強すると高性能・バグを防ぐ SQLを自作することができる。 開発フレームワークで実装。 アプリ開発者目線では開発を 効率化できるが、データベース 層の最適化とは縁遠い Java Program JVM SQL
  10. 10. リレーショナルデータベースの機能 RDBで行う「データ」の扱い Japan PostgreSQL User's Group 10 プログラム側でこれらを実現するのは大変 結果を高速に 返却する データを 適切に維持 確定された データを守る 表形式のデータ : 大量のデータから、条件に合う データを効率の良い方法で検索 変更されるデータをチェックし、 誤ったデータが入ることを防ぐ 全てのデータはバックアップなど 様々な手段で保護され、あらゆる 障害から復旧できる
  11. 11. なぜデータベース? Japan PostgreSQL User's Group 11 アプリ開発者 (Developer) データベース管理者 (DBA) Database Administrator Java x級 PM リーダー データベーススペシャリスト ・データベースだけど完全に 開発者向けの内容 ・逃げ恥 的な ベンダー資格 (Oracle Masterなど) これといった 上位資格なし だけど現場で重宝される エキスパート インフラ 全般 現場で重宝されるエキスパートを目指せる
  12. 12. PostgreSQLで学ぶデータベース技術 業務遂行を支える「業務システム」の要 最適なデータベースを選択する Japan PostgreSQL User's Group 12  システムの中核を担うデータベース  Java + PostgreSQL  こんな相談はDBAへ JavaエンジニアのためのPostgreSQLステップアップ
  13. 13. 業務システムの要 業務システムの特徴 業務要件に従って複雑なロジックを実装 →アプリケーション データは確実に格納・保管されなければならない →データベース Japan PostgreSQL User's Group 13 複雑なロジックを賢く実行する Java + PostgreSQL RDBMS PostgreSQL APサーバー
  14. 14. 業務システムに求められることは? 業務システムwebアプリ Japan PostgreSQL User's Group 14 複雑なロジックを賢く実行する Java + PostgreSQL 利用傾向 ・参照が多数 ・ユーザー数は数万~規模 アプリケーションの特徴 ユーザIDでログインし、個人の 情報を見せる利用シーンを想定 提供する機能はユーザー目線に 絞り、1ボタン=1機能なイメージ 利用傾向 ・アクセス傾向は業務次第 ・ユーザー数は数百規模 アプリケーションの特徴 業務全般に関わる複雑な条件で 検索、更新を行う 機能は業務遂行に関する全てを 備えており、タブ毎に全く違う 機能が統合されている 単純な機能、UIに秀でた Webアプリをサッと作るなら LL系かな~ 業務要件に沿った様々な機能 (ビジネスロジック)の実装 JavaEEかな!
  15. 15. 業務システムに求められるデータベースは? 業務システムwebアプリ Japan PostgreSQL User's Group 15 複雑なロジックを賢く実行する Java + PostgreSQL 利用傾向 ・参照が多数 ・ユーザー数は数万~規模 アプリケーションの特徴 ユーザIDでログインし、個人の 情報を見せる利用シーンを想定 提供する機能はユーザー目線に 絞り、1ボタン=1機能なイメージ 利用傾向 ・アクセス傾向は業務次第 ・ユーザー数は数百規模 アプリケーションの特徴 業務全般に関わる複雑な条件で 検索、更新を行う 機能は業務遂行に関する全てを 備えており、タブ毎に全く違う 機能が統合されている 大量の同時アクセスをさばき、 クエリのパターンは単純。 MySQLで高速化に命かける! 画面の数≒テーブル数=JOIN数 データの種類は?量は? よし、PostgreSQLでいこう
  16. 16. PostgreSQLを選ぶ理由 多数の結果を扱うSQL少数行を取得するSQL Japan PostgreSQL User's Group 16 複雑なロジックを賢く実行する Java + PostgreSQL ユーザ名を条件に、ユーザが 書いたブログ記事を検索 →多くても数百件程度のヒット SELECT xxxx FROM article WHERE user_id IN ( SELECT user_id FROM user WHERE user_name = ‘kkida’ ); user表 article表 ユーザ名:kkida ユーザID:2303 ユーザが属するカテゴリを条件に、 そのカテゴリのブログ更新頻度を 分析する →数万件~の結果を元に集計 SELECT xxxx FROM article WHERE user_id IN ( SELECT user_id FROM user WHERE category= ‘java’ ); user表 article表 カテゴリ:java ユーザID: 0024、0598、 0883、1109、 1188、2239、 2303、・・・・
  17. 17. PostgreSQLを選ぶ理由 多数の結果を扱うSQL 表の大部分を扱う場合は全件取得 少数行を取得するSQL 索引で欲しいデータのみを特定 Japan PostgreSQL User's Group 17 複雑なロジックを賢く実行する Java + PostgreSQL user表 article表 ユーザ名:kkida ユーザID:2303 user表 article表 カテゴリ:java ユーザID: 0024、0598、 0883、1109、 1188、2239、 2303、・・・・ article表のデータ分布 kkida soudai other kkidaは全体の数%にも 満たないので目的の行に 絞ったアクセスが効率的 article表のデータ分布 java other javaは全体の数十%に あたるので全件取得した 後で絞り込むほうが良い
  18. 18. 業務システムに求められるデータベースは? 業務システムwebアプリ Japan PostgreSQL User's Group 18 複雑なロジックを賢く実行する Java + PostgreSQL 利用傾向 ・参照が多数 ・ユーザー数は数万~規模 アプリケーションの特徴 検索の種類が限られる →どのデータベースであっても 索引チューニング次第 利用傾向 ・アクセス傾向は業務次第 ・ユーザー数は数百規模 アプリケーションの特徴 多機能なアプリケーション →表の数が多く、表内の データの分布パターンが 業務によって異なる どのデータベースでも良い MySQLはスレッドモデルで動作 →同時実行性が高く、アクセス数 多いWebサービス等では有利 PostgreSQLは、データ分布まで 考慮した最適なJOINを行う →どんな業務(≒アプリケーションの機能) に対しても現実的な解をデータベース側に 任せることができる
  19. 19. PostgreSQLを選ぶ理由 カテゴリが1つとは限らない場合 地理データの格納 Japan PostgreSQL User's Group 19 業務データに応じた最適なデータ型を選択する SELECT xxxx FROM article WHERE user_id IN ( SELECT user_id FROM user WHERE category= ‘java’ ); 得意分野 ■java ■PostgreSQL □MySQL □Oracle JSONデータ型を利用 ・データ入力時のJSONフォーマットチェック ・categoryの”要素にjavaを含む” 検索 (≠B-tree索引) PostGIS拡張 ・座標、線分、ポリゴンなどの独自データ型 ・地理データを扱う関数と索引 (半径1km以内のスポットを検索 など) CREATE TABLE user( user_id BIGINT primary key , user_name VARCHAR notnull , category JSONB ) CREATE INDEX user_category・・・ USING gin id name category 1234 kkida { lang:java db :PostgreSQL } 1235 soudai { lang :php db :PostgreSQL }
  20. 20. なぜPostgreSQL? Japan PostgreSQL User's Group 20 商用データベースに劣らない強力な選択肢へ
  21. 21. PostgreSQLで学ぶデータベース技術 データベースを使いこなすための運用管理 DBチューニングとSQLチューニング Japan PostgreSQL User's Group 21  システムの中核を担うデータベース  Java + PostgreSQL  こんな相談はDBAへ JavaエンジニアのためのPostgreSQLステップアップ
  22. 22. DBAからDeveloperの皆様へ Japan PostgreSQL User's Group 22 知ってほしい事、聞いてみたい事を持ってきました! データベースに関わるメンバーの役割 アプリ開発者(Developer) ・データベースの利用者 ・プログラム(SQL)を書く ・パフォーマンスの改善 データベース管理者(DBA) Database Administrator ・データベースの運用管理を担当 ・DBの安定稼働を使命とする ・プログラムを書かない ・運用管理に必要なSQLは書く ・OSレベルの情報も見る ・必要に応じてメンテナンス操作を実施 ・オペレーター向け手順書の整備 オペレーター ・手順書に従って各種対応を行う ・データベースへの限られた操作 セキュリティ管理者 ・データベースには アクセスできない ・DBAや開発者による不正な 操作がないことを確認する ・監査情報に対する権限
  23. 23. リレーショナルデータベースの機能 リレーショナルデータベース管理システム(RDBMS) RDBMSの機能イメージ Japan PostgreSQL User's Group 23 RDBMSにはこれだけ(こんなに)任せましょう! RDBMS PostgreSQL SQLSQLRDBMSの 共通操作言語 同時実行の実現 不正アクセスの禁止 結果を高速に 返却する データを 適切に維持 確定された データを守る
  24. 24. データベース管理者(DBA) Japan PostgreSQL User's Group 24 システムの安定稼働を支えるデータベースのスペシャリスト データベース管理業務 稼動状態の監視  死活監視  ログ監視  OSレベルの監視  パフォーマンス監視 メンテナンス操作  表や索引のメンテナンス  格納領域の管理  システム統計情報の管理  オプティマイザ統計の管理 バックアップ管理  バックアップの取得  バックアップ世代管理  リストア・リカバリ計画  リカバリ手順の作成 障害復旧  各種障害への対応 オペレーション  起動・停止  パラメータ検討・設定  DBサーバーの構築
  25. 25. データベースのチューニング DBチューニング 初期設定段階で実施 SQLチューニング 悪いSQLを特定した上で対処 Japan PostgreSQL User's Group 25 データベースチューニングとSQLチューニング 想定しているアクセス傾向(ユーザー数、トラン ザクション数)や、サーバースペックがわかると ほぼ確定できる 悪いSQLを特定する段階から相談? 悪いSQLは分かっていて、それを改善する相談?
  26. 26. DBチューニング こういうことを教えてください ピーク時の利用者数は? 更新量はどれぐらい?(行/時) サーバースペックはどれぐらい? もっと相談するなら Japan PostgreSQL User's Group 26 システムの利用傾向がわかれば初期段階で設定可能 or ○○システムで、こういうデータを xxxな処理で使いたいです~ 更新量多そうですね。 xxxなチューニングを あらかじめ考えましょう 設計段階 アプリの処理とは無関係に 全体的にもっさりする時間帯があっ て。 バックグラウンドの処理(チェック ポイントやVACUUM)が上手く 流れているか、ログを確認します。 本番稼働中 (個別最適の検討が必要なケース) サーバースペックは同時 ユーザー数を考慮して xxx程度積むと良いかも
  27. 27. DBチューニング もっと相談するなら Japan PostgreSQL User's Group 27 DBAはこんなことをします。 ○○システムで、こういうデータを xxxな処理で使いたいです~ 更新量多そうですね。xxxな チューニングを考えましょう! 設計段階 アプリの処理とは無関係に 全体的にもっさりする時間帯があって。 バックグラウンドの処理(チェック ポイントやVACUUM)が上手く 流れているか、ログを確認します。 本番稼働中 (個別最適の検討が必要なケース) サーバースペックは同時ユーザー数を 考慮してxxx程度積むと良いかも 過去実績との比較 パラメータ検討 更新テーブルの 個別設計 本当にアプリは無関係かな? OSの稼働状況 PostgreSQLのログ 確かに毎日x時頃に、 悪い状態になってる む、これは!!!
  28. 28. SQLチューニング こういうことを教えてください 効果の高い改善のために  悪くなったキッカケはありますか?  データ量が増加した  プログラム改修でSQLを微修正した  「何もしてないのに悪くなった」は信用しません(笑)  再現環境でのテストにご協力ください  特に原因がわかっていない場合  ログを自由に取れさえすれば原因特定に至る確率は高い Japan PostgreSQL User's Group 28 悪いSQLを特定し対処する ユーザーからレスポンスについて苦情 が。APは問題ないのでDBみてください 悪いSQLを特定しましょう。 状況を教えてください 何時のどの処理が重いの? 改善の目標値はどれぐらいなの? ログ取ってっていったら協力してくれる?
  29. 29. SQLチューニング 悪いSQLの特定 → チューニング対象の決定  データベース側で実行されたSQLをログに吐く機能 それなりにシステム負荷が高い アプリ側の協力をもって迅速に特定したい  インデックスを貼ることが最良とは限らない データ量 処理内容 SQLを書きなおす余地はある? Japan PostgreSQL User's Group 29 DBAはこんなことをします。 悪くなったキッカケは? 何時頃とか、 法則性はある? 開発環境は どの程度信じられる?
  30. 30. PostgreSQLで学ぶデータベース技術 Javaエンジニアの皆さまに知ってほしい、データベース の役割で大事なことをまとめました データにまつわる面倒なことは、データベースに任せて しまいましょう! Japan PostgreSQL User's Group 30 本日紹介すること  システムの中核を担うデータベース  Java + PostgreSQL  こんな相談はDBAへ 目次 JavaエンジニアのためのPostgreSQLステップアップ
  31. 31. なぜデータベース? Japan PostgreSQL User's Group 31 アプリ開発者 (Developer) データベース管理者 (DBA) Database Administrator Java x級 PM リーダー データベーススペシャリスト ・データベースだけど完全に 開発者向けの内容 ・逃げ恥 的な ベンダー資格 (Oracle Masterなど) これといった 上位資格なし だけど現場で重宝される エキスパート インフラ 全般 現場で重宝されるエキスパートを目指せる
  32. 32. なぜPostgreSQL? Japan PostgreSQL User's Group 32 商用データベースに劣らない強力な選択肢へ
  33. 33. もっとデータベースを知りたい方へ PostgreSQLのslack部屋( http://tinyurl.com/pgsql-slackin ) PostgreSQL勉強会 5/21(日)OSS-DB Silver対策セミナー(主催: LPI-Japan) 5/27(土)PostgreSQL勉強会(主催:日本PostgreSQLユーザ会) 勉強会カレンダーはこちら Japan PostgreSQL User's Group 33 PostgreSQLコミュニティの紹介 質問、相談、雑談、お知らせなど、 PostgreSQLやデータベースに まつわる話題なら何でもOK

×