しおしお

IntelliJ IDEAのことなんかを書いてます

JPOUG>SET EVENTS 20120721に行ってきた!

JPOUG>SET EVENTS 20120721(JPOUG> SET EVENTS 20120721 on Zusaar)に参加してきました。

別にDBエンジニアでもないんだけど、どんなシステムやってもDBはついて回る(最近特にOracleが多い)ので、少しでも勉強になればと思い行ってきました。

セッションは同時並行的に開催される感じだったので、

  • 大人の事情縛りでSQLチューニング
  • Oracle負荷テストツールのまとめ
  • MySql気軽に試す各種機能

を選択して聞いて来ました。

簡単ですが、それぞれのセッションのまとめをしていきます。

大人の事情縛りでSQLチューニング

@さんが説明してくださいました。内容的には、以下ブログの続編のようです。
Mac De Oracle: いん!、イン!、Index どっぷり Inde Only Access生活w - Oracle OpenWorld Unconference presented by JPOUG

大人の事情ってのは、性能出ないんだけど何とかならない?でもSQLいじるとか方式かえるのはダメだよって言われちゃったケースを想定していました。
そんなケースをカバーリングインデックスで乗り切ろうって内容でした。

ぐるぐる系処理

ぐるぐる系処理の場合、ループ1回ごとにDBへの問い合わせが行われます。なので、単発で見た場合問題のないSQLであっても発行回数が多くなり物理I/Oが増大し性能に影響与えちゃいますよと。
これを解決するために、カバーリングインデックスをはって、物理I/Oを極限まで減らしましょうって内容でした。

ただ、バッチ処理をターゲットにした内容でしたが、バッチ処理のぐるぐる系はこんな単純なはなしじゃないかなと。たぶん、カバーリングインデックスをいちいち張っていたら、更新系が持たなくなる気が・・・

スカラー副問い合わせ

スカラー副問い合わせは使ったことないから何が問題かよくわかってなかったけど、絞りこまれたレコード数分実行されちゃうってこと。ようは、単一のSQL文の中にぐるぐる系が潜んでいるので、性能問題が発生しやすいと。これも、スカラー副問い合わせをインデックスアクセスのみで完結するようにカバーリングインデックスをはってあげると物理I/Oを最小限に減らせる。

ただ、大人の事情がなかったらスカラー副問い合わせをやめる選択肢を模索するかな。

仮想列

これは、本来NULLであるべきところにデフォルト値をいれていたので、カーディナリティがおかしくなって性能問題が発生したよって例を元に説明してくれました。これを仮想列を使って、デフォルト値の部分をNULLにしてあげて仮想列をつかって結合とかしましょうとの内容でした。
仮想列は、11gR1からの新機能らしいです。ちょっと勉強しないといけないな。

Oracle負荷テストツールのまとめ

@さんが説明してくださいました。
主に、sh2chさん作のJdbcRunnerの説明でした。(他の製品の簡単な説明もあったけど割愛)
JdbcRunnerの詳細は、JdbcRunner - 汎用データベース負荷テストツール — JdbcRunner v1.2 documentationを参照してください。

このツールは、Javaで作られているので(要JDK6以上)、JDBCドライバさえあればどんなデータベースに対するテストもできること。(公式でテストしているのは、OracleMySqlPostgreSQLらしいです)
今までは、いくつか素晴らしい負荷テストツールがあったけど、やはりデータベース依存であり使いたくても使えないって問題があったので、それを解決するためにつくちゃったみたいです。(すごすぎです!)
また、Javaで作っているので、JITコンパイラの影響で計測が正しく行えないって問題が出たりもするので、ウォームアップ時間を設けて一定時間は性能計測から除外したりとかなり細かい部分まできにして作られているなと思いました。

これは、データベースへたいする負荷テストツールなんでアプリしかやってきてない人なんで、あまりぴんとこなかったりしました。アプリだと、アプリケーション側から負荷かけることしかしないので・・・。
ただ、負荷テストツールを使ってパラメータいじると性能どう変わるか学ぶできるよって話もあったので、まずは勉強のために使ってみようかなと思ってます。
個人的には、このツールのコードのほうが気になるので、コードも読んで勉強したいんですね。

MySql気軽に試す各種機能

主に、MySql Sandboxの説明をしてくださいました。
これは、MySqlを複数バージョンインストールするときに、簡単にバージョンごとに環境つくれたり、レプリ環境を簡単に構築できる優れもの!のようです。

あと、公式からのお願いとしてバイナリリリースを使ってね。(自分でビルドとかあんまりしないでね)とのお話もありました。

MySqlは実務で使ったことないので、ちゃんと勉強しないとなと思ってどれぐらい立つのだろうあか・・・

あんあまりメモ取れなかったので内容薄くなってしまいました・・・。

お礼

最後にスピーカー及びスタッフの皆様、このような機会を提供いただきありがとうございました。