月別アーカイブ: 2013年6月

一緒にまなぼ!「hiromi と楽しむOracleパフォーマンスチューニング!」【Vol.1 実行計画を見てみよう】

オラクル女子

 

こんにちわ〜はじめまして〜Oracle女子のhiromiですimage465

 

hiromiのことを先にちょっとだけ紹介させてね。あたし、

 

 

カワイイものすき〜image582

 

イケメンすき〜image582

 

みんなでワイワイするの大すき〜image582

 

 

な感じのふつ〜の女の子。でも、ITエンジニアなの。見えないってよく言われる。

 

でも、Oracleと出会って、DBが気になってきて・・・で、ER図描くのが好きになって〜って、自分でもウケる〜。

 

そんなあたしが、みんなのお役に立てたらなって思って、hiromiが知ってるOracleのパフォーマンスチューニング(ぱふぉちゅ)を教えるよ〜image517

 

hiromiと一緒に楽しくパフォチュしてみよ〜image576

SQL遅ぉ-い(泣)、と思ったら実行計画を見てみよう

作ったアプリケーションがなんか遅いな〜kame1なんて思って調べてみたらSQLが遅いせいだった!なんてことよくあるよね。

 

そういう場合はまずSQLの実行計画を見るの。そっこ〜見る!!実行計画は、どうやってどんな順番でデータを読みに行くのかっていう道すじを表してくれるもののことね。

 

SQLの実行計画を見るには3つの方法があるんだけど

  • 1.AUTOTRACE機能
  • 2.EXPLAIN PLAN文実行
  • 3.V$SQL_PLAN参照

 

だよ。すぐ使えちゃうから、試してみてね!!image465

 

 

 

いち

image1612AUTOTRACE機能image1612

 

Oracleの機能にはAUTOTRACE機能っていうのがあるの。おーととれーすnewimageneru8

 

で、これがなにかっていうと、SQLの実行計画を集める機能なの。SQL*Plusなんかで「SET AUTOTRACE」っていうコマンドを実行すると使えるんだけど、そのあとに実行したSQLの実行計画が自動的に出力されるようになるんだよ。ちょ〜便利〜image578

 

 

 

 

オプションがいくつかあるんだけど、それぞれの意味を書いておくね。ぶっちゃけ、「SET AUTOTRACE ON」だけ覚えてたら十分見れるんだけどね〜image1601

 ◆SET AUTOTRACE ON
  実行結果表示の後に、実行計画と統計情報の両方を表示

 ◆SET AUTOTRACE ON EXPLAIN
  実行結果表示の後に、実行計画のみ表示

 ◆SET AUTOTRACE ON STATISTICS
  実行結果表示の後に、統計情報のみ表示

 ◆SET AUTOTRACE TRACEONLY
  実行結果を表示せず、実行計画と統計情報を表示

このSET AUTOTRACEコマンド、気をつけなきゃいけないのは、実際にSQLも実行されちゃうってこと。だから、DELETE文の実行計画を確認したい場合にはちょっと不向きかなぁ。せっかく入れたデータが消えちゃった-(爆泣)!!ってことになっちゃう。

 

でも、簡単で覚えやすいから1番おすすめ〜image527

 

 

 

に

image1612EXPLAIN PLAN文image1612

 

実行次はEXPLAIN PLANだよ。

 

さっきのAUTOTRACE機能は、実際にSQLが実行されちゃってDELETE文のとき困るよね。どうすりゃいいの〜ってときに使えるのがEXPLAIN PLANimage582

 

じゃあ実行の仕方を教えちゃうよ〜image1687

 

 

これでこのSQLの実行計画が出力されるの。でも、長くて覚えるのたいへんだよね〜・・・

 

だから、hiromiも使うときメモったの見たり、調べなおしたりしちゃう(笑)EXPLAIN PLANは、AUTOTRACE機能と違って解析したSQL1回ぽっきりの出力で終了。その代わり、1回解析したSQLは、さっきの実行方法2行目のSELECT文を実行すればEXPLAIN PLAN文を打たなくても見れるからね。

 

実際に実行したらこんな感じに出力されるよpiyo1

 スクリーンショット 2013-06-19 10.07.05

 

 

さん

image1612V$SQL_PLAN参照image1612

 

最後はV$SQL_PLAN。

 

V$ってなんだろね?よくわかんないけど、Oracleが用意してくれいてる便利なビューはV$という文字で始まるみたいだよ。ちなみに動的パフォーマンスビューっていうらしいよ。どうてきぱふぉーまんすびゅうimage516V$はぶいだらー。このV$で始まるビューはほかにもいろいろあってどれも便利で使えるヨ!!

 

じゃあ、V$SQL_PLANってどんなビューかっていうと、ハードパースされたSQLの実行計画を一気に確認できる表なの。ハードパースって、OracleがSQLを解析することね。

SQLを実行するときって、まず最初にSQLを解析して実行できるかどうか、どう実行するのかを考えて、その解析結果とか実行計画をライブラリキャッシュっていう箱に入れておくの。それで、次に同じSQLを実行しようとしたときには、この箱から出して使うの。ハードパースするのに時間くっちゃうからね、同じSQLだったら解析する手間を省いて、はやく結果を返してあげられるってことね。

 

Oracle賢い〜やさしい〜!!newimageneru9

 

賢くてやさしいOracle君のイメージを描いたら、こんな感じかな。

 

SCN_0003

 

イメージつかめてもらえたかなぁ?

 

ライブラリキャッシュっていう箱がある共有プールってのは、Oracleのなかにあるメモリのお話だよ。
みんなで一緒に使うものをためておくところだから「共有プール」って名前っぽいよね、hiromiも知らないけど〜image517

 

それで、ハードパースしたSQLの実行計画はV$SQL_PLANを検索すると見れるんだけどね、実際にV$SQL_PLANを全件参照してみた結果サンプルを見てみて。

 

png;base6466c268812f4e7716

 

なんだこれ〜〜〜〜〜、うーん、、、って、よくわかんないよねimage465

 

結局、V$SQL_PLANだけ見ても、どのSQLのものなのかわからないのが正直なところ。解析済みのSQLの解析結果が全部入ってるからね。だから、どのSQLの実行計画か知るためには、先にV$SQLっていうビューから実行計画を見たいSQLのSQL_IDっていうキーを拾っておかないといけないんだよね。

 

なんか、これだけ聞くとV$SQL_PLANとか見るの面倒くさいし、使わなくてよくない?って思うけど、ちゃんと出番があるんだよ〜image527

 

実際にそのDBを使ってるアプリケーションが実行したSQLの実行計画を見たいってときには、コレしかないんだよね。今までの2つの方法は、SQL*Plusなんかで直接SQLを実行するときに見る方法だからね。

 

それとね、アプリケーションが動いてたくさんのSQLが実行されたなかから、全表走査(テーブルの全レコードを読み取ること)している実行計画を見つけて、そのSQLを探りあてたい!ってときとかV$SQL_PLANを見ることから始まるね。全表走査は、レコード数が多いとその分読み取るのに時間がかかってしまうから、場合によっては良くなかったりするの。

 

実行計画を見る3つの方法の説明はここまでだけど、そういえば実行計画の見方を教えてなかったねnewimageneru8

 

実行計画で確認する項目にアクセスパスがあって、OPERATIONってところに(V$SQL_PLANは、OPTIONS列も)「TABLE ACCESS FULL」とか「UNIQUE SCAN」とか書いてるよね。これが「データをどうやって検索するかー?」ってことなの。アクセスパスにはいろんな種類があって、さっき話に出てきた’全表走査’ってのもコレでわかるってこと。「TABLE ACCESS FULL」ってのが、それだよ〜image516

 

ほかにもインデックスとテーブルのアクセスパスがあるから挙げておくね。

【インデックス】
UNIQUE SCAN
RANGE SCAN
~ DESCENDING
FULL SCAN
~ DESCENDING
FAST FULL SCAN
【テーブル】
FULL
BY ROWID RANGE
BY USER ROWID
BY INDEX ROWID
BY GLOBAL INDEX ROWID
BY LOCAL INDEX ROWID
CLUSTER
HASH
SAMPLE
SAMPLE BY ROWID RANGE

じゃあ今日はこのへんでおしまいimage1601

 

次回は「Vol.2 Statspackを見てみよう」でね!ばいばぁ〜いkaerup

「かおわらい(kaowarai)」をリリース

株式会社クロノス(本社:大阪市淀川区、代表取締役:月村 俊之)は、iPad用無料子供向けおもしろ顔作成アプリケーション「かおわらい」を2013年6月11日より提供開始します。

「単純におもしろい顔が作れて、親子でわらえるアプリ」

iPad用 無料子供向けおもしろ顔作成アプリ「かおわらい」を公開

Screenshot 2013.05.29 11.25.02 Screenshot 2013.05.29 11.28.52 Screenshot 2013.05.29 11.40.31

Available_on_the_App_Store

■親子でわらう
「かおわらい」は、子供が楽しく遊んで、親子で一緒にわらうことが出来るアプリが開発出来ないかという考えから、誕生しました。
日本の伝統的な遊び「ふくわらい」から「みんなでおもしろい顔を見て笑う」というヒントを得て、それを子供一人で出来るようにアレンジしました。
子供には、「自分一人で出来た!」「お父さん、お母さんが笑ってくれた!」などを感じてもらえるように工夫しています。

■タブレットPCの普及と子供
最近は、タブレットPCが急速に普及してきたこともあり、子供がタブレットを使用する機会が増えてきています。
そこで、親子で一緒に楽しくコミュニケーションのとれるアプリとして「かおわらい」を開発しました。

■「かおわらい」の遊び方
「つくる」画面から好きな下地を選び、その上に目、鼻、口などの好きなアイテムをのせるだけなので子供だけでも簡単に操作出来ます。

■作るときは一人で、楽しむときは親子で
当社が実施したアンケート結果にて、子供にタブレットPCを使用させる目的として、「あやす」目的で使用するという意見が多くありました。
そのため、作成時は子供一人で行えるようにし、完成したら親に見せるという流れにしました。
また、「完成」を意識させることにより、遊び終わるタイミングを得られやすくもしています。

■100アイテム以上が無料、追加パックで増やすことも可能
「かおわらい」で使用する目、鼻、口などのアイテム100個以上を無料で使用出来ます。
また、無償・有償の追加パックにより、新しいアイテムを増やすことも出来るため、飽きること無く遊べます。

■日英対応
日本語と英語に対応しているため、英語圏の方にもご利用頂けます。

■アプリの概要
アプリ名: かおわらい
価格  : 無料
URL(日本語) : http://goo.gl/bnxls
URL(英語)  : http://goo.gl/qgz4u
対応端末: iPad(iOS 6.0以上)

【会社概要】
商号   : 株式会社クロノス
代表者  : 代表取締役 月村 俊之
本店所在地: 大阪市淀川区西中島4丁目13-22 大拓ビル17 5F
事業内容 : ソフトウェアの企画・開発・コンサルティング、IT教育等
URL    : https://www.kronos.jp/