Download - Oracle Database In-Memory Advisorのリアルな話
2015.4.10 関 俊洋
Oracle Database In-Memory Advisorのリアルな話
2
自己紹介関 俊洋 (せき としひろ) データベース一筋で10年目になるエンジニアです。主に新しい機能を追いかけています。
最近の活動
・12c新機能の検証・ODA技術解説 など 30本以上の記事を投稿
3
本日お話すること
アドバイザを使って少しでも仕事をラクにしたいと本気で思っているエンジニアから見た、In-MemoryAdvisorの使いどころやTips的なこと
4
Oracle Database In-Memoryあるある
Q. In-Memoryを使うとどれくらい速くなるの?
Q. どのデータをインメモリにすればいいの?全部?
Q. メモリ内で圧縮が効くみたいだけど、メモリは どのくらい用意しておけばいいの?
A.よくある回答 「それは環境依存ですね。」 → ひとまず濁すも・・ 「ぴ、PoCやりましょうか。」 → 結局こうなる
5
実際に考えなければいけないこと
SGA
Oracleインスタンス
データベース
バックグラウンド・プロセス
SYSTEM SYSAUX
TEMP UNTOTBSn
ユーザデータ用表領域
①IMカラムストアのサイジング②SGA、PGAのサイジング③ポピュレーション用のプロセス数
④インメモリ化するオブジェクト、列⑤圧縮タイプ、優先度、冗長性⑥最適なアクセスパスの確認⑦索引の削除
投資効果(ROI)
H/Wサイジング
処理の適合度
→新機能なのでノウハウなし。 エンジニアがとにかく試行錯誤するしかない?
集計表の廃止
6
そんなときに、アドバイザがリリース アドバイザ 概要
SQLチューニング・アドバイザ SQLを分析して改善のための推奨事項を提示
SQLアクセス・アドバイザ 索引、マテビュー(ログ)、パーティションの推奨事項を提示
メモリ・アドバイザ SGA、PGA、バッファ・キャッシュの推奨サイズを提示
セグメント・アドバイザ オブジェクトに解放可能な領域があるかを提示
UNDOアドバイザ UNDO表領域に必要な最小サイズを提示
MTTRアドバイザ FAST_START_MTTR_TARGETの設定による影響を評価
Database In-Memoryアドバイザ 高速化の目安とインメモリ化するためのSQLを提示NEW
その他:データリカバリ・アドバイザ、SQL修復アドバイザなどもあります
7
こんなアドバイスをもらえるHTML形式でレポートを出力
・分析処理の時間と比率 ・IMカラムストアの推奨サイズ ・SGAとIMカラムストアの比率 ・分析処理時間の改善率 ・表ごとの推奨圧縮タイプ ・圧縮後のサイズ ・インメモリ化するためのDDL
→実際に試してみました
まずは、アドバイザのセットアップ
9
動作要件をチェック対象のOracle Databaseバージョン● 11.2.0.3以上。12.1.0.2での利用が推奨
必要なライセンス● Oracle Tuning Pack→10g以降はOracle Diagnostics Packとの同時購入が必要です
その他意識すること● アドバイザはSQL*Plusから実行。Enterprise Managerではない● Non-CDB環境のみサポートされる→CDBやPDBはRAISE_APPLICATION_ERRORで弾かれるようになっています
10
ダウンロード&インストールダウンロード● MOS 1965343.1
インストール● In-Memory Advisor = スクリプト群→unwrapしたろとか考えてはいけません
https://support.oracle.com/epmos/faces/DocumentDisplay?id=1965343.1
SQL> CONNECT sys/<password> AS SYSDBASQL> @instimadv ※パスワードや表領域など色々入力していく。1~2分で終了
11
動かす前に仕組みを理解● AWR、ASHがアドバイザの主な情報源 (なのでオプションがいる)
● アドバイザ用の特別な情報収集は必要ない● SQLチューニング・セットの指定は任意
情報源
AWR、ASH
STS (任意)
ディクショナリ
In-Memory Advisor(IMADVISORスキーマ)
レポート、SQL生成
ALTER TABLE...
12
レポートを生成してみる● Database In-Memoryが得意な処理とそうでない処理を混ぜながら負荷をかける● SQLは全部で8種類● 表は全部で16個。データ量は合計約80GB
FULL SCAN + JOIN
UNIQUE SCAN , INSERT , UPDATE
Oracle Linux 6.6 64bitOracle Database 12.1.0.2Non-CDB シングル構成
13
レポートを生成してみる
過去 未来10分前 現在
SQL> -- レポート生成スクリプトの実行SQL> @imadvisor_analyze_and_report・・・Enter value for begin_time: -10・・・Enter value for duration: <ENTER>
レポート生成スクリプトのなかで、分析対象となる期間を指定
AWRスナップショット
→過去に遡って分析するもので、 リアルタイムではない →期間にもよるが、数十秒ほどで レポート(HTML)が出てくる
負荷をかけた時間
アドバイス結果をチェック
15
レポートの内訳●大きく、5つの項目に分かれている
①Workload Database Usage分析処理の時間と比率
②In-Memory Sizesインメモリ・カラムストアの推奨サイズと分析処理の改善率
③ALL n SQL Statements With Analytics Processing BenefitSQL毎のレポート
④All n Objects Recommended To Place In-Memory For Analytics Processingオブジェクト毎のレポート
⑤DDLALTER文をSQLファイルとして別に出力
16
①Workload Database Usage
どんな情報が出る?指定した期間のあいだ、どの程度分析処理が行われたかが分かる。大まかな処理傾向の把握に役立つ。
意識すべきこと・あまりにも分析処理の割合が 低すぎる場合、Database In- Memoryの効果は限定的・単純な検索は「Analytics」に カウントされない
17
②In-Memory Sizes
どんな情報が出る?・IMカラムストアの推奨サイズ・その推奨サイズがSGAの何%か・IMカラムストアのサイズごとに 分析処理はどの程度改善するか
意識すべきこと・IMカラムストアの実効容量が 70~80%(隠しパラ)であること を考慮した推奨値が出る・推奨値が現行のSGAサイズを 超える場合もある
18
③ALL n SQL Statements With Analytics Processing Benefit
どんな情報が出る?IMカラムストアを推奨どおりに設定した場合の性能改善効果。
意識すべきこと性能改善率が相当控えめに出てくるので、ここよりも②や次の④にある情報を参考にするべき。
19
④All n Objects Recommended To Place In-Memory For Analytics Processing
どんな情報が出る?・推奨される圧縮タイプ・その圧縮タイプを利用した際の メモリ内でのサイズ・性能改善効果
意識すべきこと・サイズは表全体をインメモリ化 した際の推定値。選択リストの 列ではない・マテビューもOK (TABLE扱い)・パーティション表は・・・
20
⑤DDL
Rem Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.ALTER TABLE "SOE"."CUSTOMERS" INMEMORY NO MEMCOMPRESS;ALTER TABLE "SOE"."ORDERS" INMEMORY NO MEMCOMPRESS;ALTER TABLE "SOE"."ORDER_ITEMS" INMEMORY NO MEMCOMPRESS;ALTER TABLE "SSB"."CUSTOMER" INMEMORY MEMCOMPRESS FOR QUERY LOW;ALTER TABLE "SSB"."DATE1" INMEMORY MEMCOMPRESS FOR QUERY LOW;ALTER TABLE "SSB"."LINEORDER" INMEMORY MEMCOMPRESS FOR QUERY LOWALTER TABLE "SSB"."PART" INMEMORY MEMCOMPRESS FOR QUERY LOW;ALTER TABLE "SSB"."SUPPLIER" INMEMORY MEMCOMPRESS FOR QUERY LOW;
どんな情報が出る?インメモリ化が推奨される表ごとのDDL文。(ALTER文)
意識すべきこと・指定されるのは圧縮タイプの オプションのみ・優先度や冗長性などはユーザ 側で検討する必要あり
21
アドバイザが教えてくれること
SGA
Oracleインスタンス
データベース
バックグラウンド・プロセス
SYSTEM SYSAUX
TEMP UNTOTBSn
ユーザデータ用表領域
①IMカラムストアのサイジング②SGA、PGAのサイジング③ポピュレーション用のプロセス数
④インメモリ化するオブジェクト、列⑤圧縮タイプ、優先度、冗長性⑥最適なアクセスパスの確認⑦索引の削除
投資効果(ROI)
H/Wサイジング
処理の適合度
→「すぐ分かる情報をすぐに出す機能」と言える。 詳細検討に移る前の情報収集に向いている。(私見含む)
集計表の廃止
22
実際にDatabase In-Memoryを使った場合との比較● 性能改善効果
● 数10倍として見積もられることが多く、大きなギャップはなかった● 実際の検討ではH/W更改を伴うケースが多いので、CPUの性能向上やコア数の増加によって性能は上振れする
● 圧縮効果、IMカラムストアの推奨サイズ● 圧縮効果は1倍~10倍で見積もられることが多い。今回の検証ではギャップが出た● DBMS_COMPRESSIONパッケージで見積もるという方法もある。手間だが正確
アドバイザは、Database In-Memoryのベストプラクティスを見出すための入り口に過ぎない。最終的な見極めは自分自身で行うことを意識しながら使う。
(アドバイザで試行錯誤するよりPoCをしたほうが短く済むこともあります。)
これから使う方にお薦めの実行方法
24
お薦めの実行方法● レポート生成スクリプトを使わずに手動実行
● 手動実行でしか指定できないパラメータがある● パラメータを変更すると永続化されるのでRESETが必要
DBMS_INMEMORY_ADVISORパッケージ
CREATE_TASK
ADD_SQLSET
ADD_STATISTICS
ADD_HIST_STATISTICS
DROP_TASK
EXECUTE_TASK
ASH_SQL_COVERAGE_PCT
GENERATE_RECOMMENDATIONS
SET_PARAMETER
GET_PARAMETER
RESET_PARAMETERS
レポート生成スクリプトで呼び出されるもの
25
手動実行の例SET SERVEROUTPUT ON;DECLARE sql_coverage_pct NUMBER;BEGIN BEGIN dbms_inmemory_advisor.drop_task ('my_task', force=>TRUE); EXCEPTION WHEN OTHERS THEN NULL; END; dbms_inmemory_advisor.create_task ('my_task'); -- dbms_inmemory.advisor.reset_parameters(); -- dbms_inmemory_advisor.set_parameter('CPU_BENEFIT_FACTOR', 4.0); -- dbms_inmemory_advisor.add_sqlset ('my_task','my_sts','SSB'); dbms_inmemory_advisor.add_hist_statistics ('my_task',1267,1335); sql_coverage_pct := dbms_inmemory_advisor.ash_sql_coverage_pct ('my_task'); dbms_output.put_line ('sql_coverage_pct='||sql_coverage_pct); dbms_inmemory_advisor.execute_task ('my_task'); dbms_inmemory_advisor.generate_recommendations ('my_task');END;/DEFINE im_task_name='my_task';@imadvisor_fetch_recommendations.sql
繰り返し実施する場合に必要
パラメータ、STSの指定
時間ではなくSNAP_ID指定
26
アドバイザのパラメータ● 自由に変更できるが、極端に増減させると出来レースになってしまうので、変更は慎重に行うべき
● こういう結果が欲しいから、という理由で動作を変えてしまうのは本末転倒
READ_BENEFIT_FACTORWRITE_DISADVANTAGE_FACTORCPU_BENEFIT_FACTORMIN_OVERALL_BENEFIT_FACTORMIN_INMEMORY_OBJECT_SIZEFAVOR_HIGH_COMPRESSIONLOB_BENEFIT_REDUCTION
デフォルト値10.0
20.0に変更 5.0に変更
27
まとめ● アドバイザの実行はあくまでファーストステップ● 仕組みを知る、やってみることで得られる発見も多い
● 便利な機能に依存して思考を止めてはいけない (自戒も込めて)● もともと、Database In-MemoryのPoC自体はそれほど難しくない● サイジングも、クラウド化の波で考え方が変わってきている
何より、新しい機能は楽しい!! 速いは楽しい!!
28
参考:関連資料● MOS
● Oracle Database In-Memory Advisor (ドキュメントID 1965343.1)https://support.oracle.com/epmos/faces/DocumentDisplay?id=1965343.1
● TWP● Oracle Database In-Memory Advisorhttps://support.oracle.com/epmos/faces/DocumentDisplay?id=1965343.1
● Oracle Database In-Memory Advisor Best Practiceshttp://www.oracle.com/technetwork/database/manageability/info/twp-in-memory-advisor-bp-2430474.pdf