oracle database in-memory advisorのリアルな話

28
2015.4.10 関 俊洋 Oracle Database In-Memory Advisorのリアルな話

Upload: toshihiro-seki

Post on 07-Aug-2015

358 views

Category:

Technology


3 download

TRANSCRIPT

Page 1: Oracle Database In-Memory Advisorのリアルな話

2015.4.10 関 俊洋

Oracle Database In-Memory Advisorのリアルな話

Page 2: Oracle Database In-Memory Advisorのリアルな話

 

2

自己紹介関 俊洋 (せき としひろ) データベース一筋で10年目になるエンジニアです。主に新しい機能を追いかけています。

最近の活動

・12c新機能の検証・ODA技術解説 など 30本以上の記事を投稿

Page 3: Oracle Database In-Memory Advisorのリアルな話

 

3

本日お話すること

アドバイザを使って少しでも仕事をラクにしたいと本気で思っているエンジニアから見た、In-MemoryAdvisorの使いどころやTips的なこと

Page 4: Oracle Database In-Memory Advisorのリアルな話

 

4

Oracle Database In-Memoryあるある

Q. In-Memoryを使うとどれくらい速くなるの?

Q. どのデータをインメモリにすればいいの?全部?

Q. メモリ内で圧縮が効くみたいだけど、メモリは  どのくらい用意しておけばいいの?

A.よくある回答 「それは環境依存ですね。」  → ひとまず濁すも・・ 「ぴ、PoCやりましょうか。」 → 結局こうなる

Page 5: Oracle Database In-Memory Advisorのリアルな話

 

5

実際に考えなければいけないこと

SGA

Oracleインスタンス

データベース

バックグラウンド・プロセス

SYSTEM SYSAUX

TEMP UNTOTBSn

ユーザデータ用表領域

①IMカラムストアのサイジング②SGA、PGAのサイジング③ポピュレーション用のプロセス数

④インメモリ化するオブジェクト、列⑤圧縮タイプ、優先度、冗長性⑥最適なアクセスパスの確認⑦索引の削除

投資効果(ROI)

H/Wサイジング

処理の適合度

→新機能なのでノウハウなし。 エンジニアがとにかく試行錯誤するしかない?

集計表の廃止

Page 6: Oracle Database In-Memory Advisorのリアルな話

 

6

そんなときに、アドバイザがリリース アドバイザ 概要

 SQLチューニング・アドバイザ SQLを分析して改善のための推奨事項を提示

 SQLアクセス・アドバイザ 索引、マテビュー(ログ)、パーティションの推奨事項を提示

 メモリ・アドバイザ SGA、PGA、バッファ・キャッシュの推奨サイズを提示

 セグメント・アドバイザ オブジェクトに解放可能な領域があるかを提示

 UNDOアドバイザ UNDO表領域に必要な最小サイズを提示

 MTTRアドバイザ FAST_START_MTTR_TARGETの設定による影響を評価

 Database In-Memoryアドバイザ 高速化の目安とインメモリ化するためのSQLを提示NEW

その他:データリカバリ・アドバイザ、SQL修復アドバイザなどもあります

Page 7: Oracle Database In-Memory Advisorのリアルな話

 

7

こんなアドバイスをもらえるHTML形式でレポートを出力

・分析処理の時間と比率 ・IMカラムストアの推奨サイズ ・SGAとIMカラムストアの比率 ・分析処理時間の改善率 ・表ごとの推奨圧縮タイプ ・圧縮後のサイズ ・インメモリ化するためのDDL

→実際に試してみました

Page 8: Oracle Database In-Memory Advisorのリアルな話

まずは、アドバイザのセットアップ

Page 9: Oracle Database In-Memory Advisorのリアルな話

 

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で弾かれるようになっています

Page 10: Oracle Database In-Memory Advisorのリアルな話

 

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分で終了

Page 11: Oracle Database In-Memory Advisorのリアルな話

 

11

動かす前に仕組みを理解● AWR、ASHがアドバイザの主な情報源 (なのでオプションがいる)

● アドバイザ用の特別な情報収集は必要ない● SQLチューニング・セットの指定は任意

情報源

AWR、ASH

STS (任意)

ディクショナリ

In-Memory Advisor(IMADVISORスキーマ)

レポート、SQL生成

ALTER TABLE...

Page 12: Oracle Database In-Memory Advisorのリアルな話

 

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 シングル構成

Page 13: Oracle Database In-Memory Advisorのリアルな話

 

13

レポートを生成してみる

過去 未来10分前 現在

SQL> -- レポート生成スクリプトの実行SQL> @imadvisor_analyze_and_report・・・Enter value for begin_time: -10・・・Enter value for duration: <ENTER>

レポート生成スクリプトのなかで、分析対象となる期間を指定

AWRスナップショット

→過去に遡って分析するもので、 リアルタイムではない →期間にもよるが、数十秒ほどで レポート(HTML)が出てくる

負荷をかけた時間

Page 14: Oracle Database In-Memory Advisorのリアルな話

アドバイス結果をチェック

Page 15: Oracle Database In-Memory Advisorのリアルな話

 

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ファイルとして別に出力

Page 16: Oracle Database In-Memory Advisorのリアルな話

 

16

①Workload Database Usage

どんな情報が出る?指定した期間のあいだ、どの程度分析処理が行われたかが分かる。大まかな処理傾向の把握に役立つ。

意識すべきこと・あまりにも分析処理の割合が 低すぎる場合、Database In-  Memoryの効果は限定的・単純な検索は「Analytics」に カウントされない

Page 17: Oracle Database In-Memory Advisorのリアルな話

 

17

②In-Memory Sizes

どんな情報が出る?・IMカラムストアの推奨サイズ・その推奨サイズがSGAの何%か・IMカラムストアのサイズごとに 分析処理はどの程度改善するか

意識すべきこと・IMカラムストアの実効容量が 70~80%(隠しパラ)であること を考慮した推奨値が出る・推奨値が現行のSGAサイズを 超える場合もある

Page 18: Oracle Database In-Memory Advisorのリアルな話

 

18

③ALL n SQL Statements With Analytics Processing Benefit

どんな情報が出る?IMカラムストアを推奨どおりに設定した場合の性能改善効果。

意識すべきこと性能改善率が相当控えめに出てくるので、ここよりも②や次の④にある情報を参考にするべき。

Page 19: Oracle Database In-Memory Advisorのリアルな話

 

19

④All n Objects Recommended To Place In-Memory For Analytics Processing

どんな情報が出る?・推奨される圧縮タイプ・その圧縮タイプを利用した際の メモリ内でのサイズ・性能改善効果

意識すべきこと・サイズは表全体をインメモリ化 した際の推定値。選択リストの 列ではない・マテビューもOK (TABLE扱い)・パーティション表は・・・

Page 20: Oracle Database In-Memory Advisorのリアルな話

 

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文)

意識すべきこと・指定されるのは圧縮タイプの オプションのみ・優先度や冗長性などはユーザ 側で検討する必要あり

Page 21: Oracle Database In-Memory Advisorのリアルな話

 

21

アドバイザが教えてくれること

SGA

Oracleインスタンス

データベース

バックグラウンド・プロセス

SYSTEM SYSAUX

TEMP UNTOTBSn

ユーザデータ用表領域

①IMカラムストアのサイジング②SGA、PGAのサイジング③ポピュレーション用のプロセス数

④インメモリ化するオブジェクト、列⑤圧縮タイプ、優先度、冗長性⑥最適なアクセスパスの確認⑦索引の削除

投資効果(ROI)

H/Wサイジング

処理の適合度

→「すぐ分かる情報をすぐに出す機能」と言える。 詳細検討に移る前の情報収集に向いている。(私見含む) 

集計表の廃止

Page 22: Oracle Database In-Memory Advisorのリアルな話

 

22

実際にDatabase In-Memoryを使った場合との比較● 性能改善効果

● 数10倍として見積もられることが多く、大きなギャップはなかった● 実際の検討ではH/W更改を伴うケースが多いので、CPUの性能向上やコア数の増加によって性能は上振れする

● 圧縮効果、IMカラムストアの推奨サイズ● 圧縮効果は1倍~10倍で見積もられることが多い。今回の検証ではギャップが出た● DBMS_COMPRESSIONパッケージで見積もるという方法もある。手間だが正確

アドバイザは、Database In-Memoryのベストプラクティスを見出すための入り口に過ぎない。最終的な見極めは自分自身で行うことを意識しながら使う。

(アドバイザで試行錯誤するよりPoCをしたほうが短く済むこともあります。)

Page 23: Oracle Database In-Memory Advisorのリアルな話

これから使う方にお薦めの実行方法

Page 24: Oracle Database In-Memory Advisorのリアルな話

 

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

レポート生成スクリプトで呼び出されるもの

Page 25: Oracle Database In-Memory Advisorのリアルな話

 

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指定

Page 26: Oracle Database In-Memory Advisorのリアルな話

 

26

アドバイザのパラメータ● 自由に変更できるが、極端に増減させると出来レースになってしまうので、変更は慎重に行うべき

● こういう結果が欲しいから、という理由で動作を変えてしまうのは本末転倒

READ_BENEFIT_FACTORWRITE_DISADVANTAGE_FACTORCPU_BENEFIT_FACTORMIN_OVERALL_BENEFIT_FACTORMIN_INMEMORY_OBJECT_SIZEFAVOR_HIGH_COMPRESSIONLOB_BENEFIT_REDUCTION

デフォルト値10.0

20.0に変更 5.0に変更

Page 27: Oracle Database In-Memory Advisorのリアルな話

 

27

まとめ● アドバイザの実行はあくまでファーストステップ● 仕組みを知る、やってみることで得られる発見も多い

● 便利な機能に依存して思考を止めてはいけない (自戒も込めて)● もともと、Database In-MemoryのPoC自体はそれほど難しくない● サイジングも、クラウド化の波で考え方が変わってきている

何より、新しい機能は楽しい!! 速いは楽しい!!

Page 28: Oracle Database In-Memory Advisorのリアルな話

 

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