索引やキャッシュ機能でより快適に~JPOUG Oracle Database入学式2017~

リレーショナル・データベース管理システム(Relational Database Management System(RDBMS))で大きなシェアを獲得しているOracle Databaseをテーマとした勉強会が今年も21cafeで開催されました!Oracle Databaseを選ぶ理由、構造、専門言語SQLを紹介した2016年に続き、昨年とは異なるテーマを初心者にもわかりやすく紹介していました。

データベースの知識ゼロでも分かるリレーショナルデータベース(RDB)のお話

■Introduction of Oracle Database Architecture

発表者:渡部亮太氏(株式会社コーソル)

■OracleアーキテクチャとSQL処理

Oracle Databaseの構造には下記の要素があります。
・クライアント アプリケーション(SQLを用いて処理を依頼)
・セッション(Oracleに接続される単位)
・サーバープロセス(SQLに誤りがないかなど解析処理を実施)
・SGA(複数のユーザーで共有されるメモリ領域。データを一時的に蓄積)
・データファイル(データを蓄積)

SQL文の解析、最適化、行ソース生成および実行を行うSQL処理は下記手順で実行されます。
①クライアント アプリケーションがSQLを発行
②サーバープロセスが解析結果を共有し、SGAの共有プールに保管
③データファイルからデータを取得し、キャッシュとして蓄積
④必要な場合はデータをソート
⑤サーバープロセスからクライアント アプリケーションに検索結果を返送

そして論理データベース構造である表領域のテーブル内の行データは、それぞれの表領域に対応する物理データファイルのデータブロックに保管されています。

■データとファイルI/O

「SQL実行」とはデータファイルからデータブロックを引っぱってくることです。それによりデータが取得できます。そのためテーブルはデータブロックの集合体ともいえます。

Oracle Databaseはデータを来た順番通りにテーブルにいれる特徴があります。
その結果、必要な行を特定しにくく、かつ全ブロックを確認する必要があるため、データ量が多いと大変です。そこで検索と実行計画が必要となってきます。

■テーブル、索引と実行計画

索引を使うとアクセスするブロック数を大幅に減らし、検索対象の列の値を使って、索引から対象のデータを効率的に検索できるようになります。索引は、予めデータがテーブルのどこにあるかを記録しています。また。索引はツリー構造をしているため、ツリーの最上位から構造をたどる形で効率的な検索が可能になっています。

実行計画とはSQL処理の手順を示す、オペレーションの組み合わせです。アプリケーションプログラムから指示するものではなく、自動的に作成してくれるものです。ただし、オプティマイザ統計が最新でないと適切な実行計画が作成されないため、意図したパフォーマンスが得られない場合、想定した実行計画で実行されているかチェックする必要があります。

適切な索引の作成方法のポイントとして、下記3つを挙げていました。
・WHERE句に頻繁に指定される列を使用する
・テーブルと発行されるSQLを見て判断する
・索引数が増えると負荷が増加してしまうため、むやみやたらに作らない

しかし検索機能は万能というわけではなく、検索対象が多い場合は索引を使うことで逆に処理負荷が増え、パフォーマンスが落ちてしまう場合があります。

■オプティマイザ統計

最適な実行計画を作成するためには「データの格納状態」を知る必要があり、それを集約したものが「オプティマイザ統計」です。

使用上の注意点として、下記3つを挙げていました。
・大量データ更新するたびに、オプティマイザ統計を収集する必要がある
・少量データ更新であれば、オプティマイザ統計を再収集する必要はない
・Oracle Database 10g以降ではデフォルトで自動収集されるが、自動修正までの間はズレが生じる

■データベースバッファキャッシュ

データの保管場所には物理I/O(データファイルからの入出力)や論理I/O(SGAからの入出力)など複数ありますが、論理I/Oを使用した方が圧倒的に速くなります。

一般的に、速さのためにはどれだけデータがメモリにキャッシュされているかがポイントです。パフォーマンスの向上にはキャッシュのためのメモリサイズを増やすことが大きなポイントです。

キャッシュできるデータの量には制限があります。いっぱいになった場合は自動的に使用頻度の低いものから消されますが、そのデータを使いたい場合はデータファイルから取り出せます。

■SQLの解析と共有プール

解析の工程はCPUを多く使うため、重い処理になります。Oracleでは解析結果を共有カーソルとして共有プールにキャッシュする仕組みがあります。それにより、二回目以降はキャッシュを使いより少ないCPUでの実行が可能となります。

■まとめ

・SQL処理におけるOracleの構成要素
・索引の適切な使用
・オプティマイザ統計の適切な取得
・各種メモリ領域(データベースバッファキャッシュ、共有プール、PGA)の役割理解
・ハードパース回避のためにSQLのバインド変数化が有効なケースあり

各項目毎に実演があり、初心者も理解しやすいよう配慮がなされていました。終了時間ギリギリまでQ&Aが飛び交い、とても盛り上がっていました!

Japan Oracle User Groupとは

オラクル製品を扱う技術者が、それぞれに持つ孤独。複雑化するシステムを把握し、そして紐解き、限られた時間で最適解を導き出すという困難に、孤独に向き合う技術者たちの問題を少しでも解決したい。みんなが集まれば、何か新しいことができるんじゃないだろうか。そんな思いを持つ者達が、この日本で集まり、世界のオラクル・ユーザー・グループの一員として活動します。

▼コミュニティ情報



イベントや懇親会の告知を行っています。是非、チェックしてみてください!

公式ページ:http://www.jpoug.org/
Facebookグループ:https://www.facebook.com/jpougfan
DoorKeeperページ:https://jpoug.doorkeeper.jp/

▼これまでのJapan Oracle User Groupのレポート
データベース初心者でも分かる RDBMSの基本~JPOUG Oracle Database入学式レポート
Oracle運用のノウハウが満載!JPOUG Tech Talk Night #6イベントレポート

21cafeでは今後も随時イベント情報を更新していきます。勉強会などのイベント情報はこちらをチェック!


最新情報はFacebook/Twitterをフォロー!


関連する記事

facebook

案件情報や最新記事をお届けします。
ぜひチェックしてみてください。