kagamihogeの日記

kagamihogeの日記です。

Oracle

JPAからフェッチサイズを変更したかった

JPAだけで完結するのはさすがにムリがあったのでこういうタイトルにした。が、JPAプロバイダ固有のAPIのレベルではフェッチサイズを変更する効果を確認できた。JDBCのsetFetchSize変更時の動きをstatspackで見てみる - kagamihogeの日記ではJDBCを直接使用し…

JPAからJDBCのバッチ更新を使う

JDBCのaddBatchとexecuteBatchの頻度変更時の動きをstatspackで見てみる - kagamihogeの日記は、JDBCを直接使用していた。が、JPAから同じことをするにはどういう設定などをすればよいのか。それをやってみて、ついでに実行速度の違いも計測する。実際には、…

JDBCのaddBatchとexecuteBatchの頻度変更時の動きをstatspackで見てみる

JDBCのsetFetchSize変更時の動きをstatspackで見てみる - kagamihogeのblogに引き続いてstatspackの学習を続ける。昔書いたJDBC経由で100万件取得・追加してみた - kagamihogeのblogでは、JDBCのjava.sql.Statement#addBatch(String sql)とjava.sql.Prepared…

JDBCのsetFetchSize変更時の動きをstatspackで見てみる

昔書いたJDBC経由で100万件取得・追加してみた - kagamihogeのblogでは、JDBCのjava.sql.Statement#setFetchSize(int rows)を変更するとSELECT文の実行速度が改善できる可能性があることを調べた。ここでは、なぜ速度が改善されるかを考える。やることとして…

CSVファイルを元にUPDATEする

下記のように主キーと値からなるテーブルがあるとする。 ID VALUE 1 value1 2 value2 3 value3 上記のテーブルを、下記のようなCSVファイルを入力として更新していくプログラムを考える。 1,update_value1 2,update_value2 3,update_value3 環境 DB CentOS-6…

EclipseでSQL発行するEclipse Data Source ExplorerとSQL Scrapbook

EclipseからSQL発行できるViewが存在している。SQL Developerとか使っちゃうんでほとんど使うことないんだけどメモ書き程度に使い方を書いておく。 環境 DB CentOS-6.4-x86_64 Oracle Database Express Edition 11g Release 2 Java Java SE Development Kit …

ループでinsertよりinsert selectが早い理由をstatspackで見てみる

ループでinsertを回数分だけ発行するより、insert into ... select ... の方が早い。後者はselect出来るものしか使えないので、比較対象としてはちょっと違うかもしれないけれども。逆に言えばselect出来るようにしてしまえばいいので、例えばファイル取り込…

statspack練習にコミット間隔有無で比較

statspackさわる - kagamihogeの日記でstatspackを自分の環境で手軽に試せるようになった。なので、練習がてら分かりやすくハッキリと差が出るレポートを取得して眺めてみる。やることは、10万回insertを実行するJavaのプログラムを2種類用意する。1つは、1…

Oracle SQL Developer 4.0 EA3のインストールにハマッた

SQL Developer 4.0 Downloads でOracle SQL Developer 4.0 EA3がダウンロード可能になっている。前バージョンの時(Oracle SQL Developer 4.0のインストールとややハマッた時のメモ - kagamihogeの日記)と同じくハマったので対応方法を残しておく。 環境 Wi…

OracleのPIVOTによる行列変換

PivotとUnPivotはOracle11gR1の新機能で、select文での行列変換を容易に行うことができます。 図でイメージするOracle DatabaseのSQL全集 第8回 PivotとUnPivot より抜粋 環境 Oracle Database Express Edition 11g Release 2をCentOS 6.4 x86_64上で動作 Or…

Oracleのクラスタを範囲スキャン代わりにする

Oracleのクラスタさわってみる - kagamihogeのblogの続き。Oracleのクラスタの使用例で良く見かけるのは、2つ以上のテーブルを結びつける多重クラスタが多い。ただし、別に1つのクラスタに1つのクラスタ化表しか入れなくても問題は無い。このとき受けられる…

Oracleのクラスタさわってみる

Oracle Database管理者ガイド11g リリース2 (11.2) - クラスタの概要クラスタとは、joinするデータをあらかじめ連続した領域に置いておくことでディスクI/Oを減らしjoinの高速化を図れる、というもの。クラスタリングとかと概念は似てるけど、機能的には別モ…

GlassFish4でOracle11gXEのJDBC接続をつくる

GlassFishの管理コンソールを使用してOracleデータベースへの接続をつくりJPAで接続テスする。 環境 Java SE Development Kit 7u40 Eclipse Kepler(4.3.1) SR1 IDE for Java EE Developers GlassFish Server Open Source Edition 4.0 GlassFish Tools for Ke…

Oracle SQL Developer 4.0の新機能

SQL Developer 4.0 New Featuresというわけで、上記のNew Featuresをテキトーに日本語訳&試せる機能については試す。下記の、引用ブロックの上半分はSQL Developer 4.0 New Featuresをそのまま引用したもの。下半分は俺による非公式日本語訳です。おかしな…

WildFly 8.0.0.Alpha4でOracle 11g XEのデータソースを追加する

管理コンソールを使用してデータソースの定義を行う手順。 環境 Java SE Development Kit 7u40 Eclipse Kepler(4.3) IDE for Java EE Developers JBoss AS Tools(Kepler) 4.1.0.Final WildFly 8.0.0.Alpha4 Oracle Database Express Edition 11g Release 2を…

Oracle SQL Developer 4.0のインストールとややハマッた時のメモ

Oracle SQL DeveloperでSQL Developer 4.0 Early Adopter 2 is now available.というわけで、Oracle SQL Developer 4.0がダウンロード可能になっている。新機能はSQL Developer 4.0 New Featuresのような感じ。それらを試したいところだが、インストールに若…

statspackさわる

とりあえず、stats$ナントカ表とかTop 5 Timed Eventsとかのレポートを見れるようになるところまで。なお、STATSPACK 設定手順 を見ながらやりました。 環境 Oracle Database Express Edition 11g Release 2をCentOS 6.4 x86_64上で動作 手順 インストール S…

SELECTをアスタリスクと列指定したときの速度差

SQLアンチパターン18章 インプリシットカラム(暗黙の列)では、SELECT,INSERT,UPDATEするときは、*(アスタリスク)を使わず、必要な列のみを列挙したほうが良い、といったことが書かれている。その理由については色々書かれているが、このエントリでは実行…

集計関数がメモリで処理しきれなくなったとき起きたこと

一般的にOracleなりRDBMSのパフォーマンスは、メモリでさばける量を超えると突然悪化すると言われる。その理由は、メモリで処理しきれていたものが、ディスクIOを必要とするようになるから、ということになる。よって、実際のところどの程度悪化するものなの…

Oracleのdbms_random.valueで1とmaxの間によるランダムセレクションのばらつきを調べる

OracleのSAMPLE句によるランダムセレクションのばらつきを調べる - kagamihogeのblog の続き。SQLアンチパターンのランダムセレクションのベーシックな方法のオススメとして下記のやり方が紹介されている。 1から主キーの最大値までの間の値をランダムに選択…

OracleのSAMPLE句によるランダムセレクションのばらつきを調べる

SQLアンチパターンを読んでいるのだけど、第15章 ランダムセレクションでは文字通りランダム抽出についての章がある。その章で、ベンダー依存の解決策という断り書きがされた上で、OracleのSAMPLE句を使用したやり方が紹介されている。 Oracleでは(中略)SA…

where句なしでupdateしちゃったとき

RDBMSでwhere句なしのupdate/deleteをする機会は極めて限られ、本番環境でついうっかりやってしまうと夜逃げしたくなるレベルである。しかしやっちまったものは仕方ないので、どうすれば少なくとも無かったことにする状態に出来るのかを考える。 環境 Oracle…

truncateとdeleteのちがいを使用ブロック数から見てみる

テーブル切捨てのtruncateと、条件無しでdeleteは、どちらも結果的にテーブルから全行削除される。しかし、両者の動作は異なるもので、想定される使い方も異なる。Oracleの運用ミス事例でもしばしば取り上げられる。システムはなぜダウンするのかのp.232「2…

インデックスのついた列をUPDATEしまくるとインデックスのサイズは増えまくる

インデックスをタクサン作ったときINSERT,UPDATE,DELETEは遅くなるか - kagamihogeのblog を書いたあと、下記の本をあらためて見直したところ、このような記述となっていた。 データを削除するとテーブルの行は物理的に削除されるが、インデックスの行は単に…

Oracle 11g XEのリスナーが起動しなくなった

centosにインストールしたoracle 11g xeをアンインストールしてもっかいインストールしなおしたら、リスナーが起動しなくなった。 環境 Oracle Database Express Edition 11g Release 2をCentOS 6.4 x86_64上で動作 Oracle SQL Developer 3.2 起きたこと、や…

インデックスをタクサン作ったときINSERT,UPDATE,DELETEは遅くなるか

一般に、DB運用のアドバイスとして使われないインデックスは削除すべき、とある。ディスクのムダはもとより、インデックスのメンテナンスコストの増大は性能劣化に繋がるからである。というわけで、今回はインデックスを大量に付与したとき何が起こるかを見…

ジョインしてgroup byとgroup byをインラインビューにしてジョインの差を見たかった

SQLのパフォーマンスの本を読んでいると、なるべくジョインの回数は抑えるべし、とある。ここでは、カンタンな集計クエリを通してそのことを確認してみ……たかった。結論から書くと、下記環境でのカンタンなクエリでは差を見ることは出来なかった。 環境 Orac…

ループの中でDBコネクション接続切断したときの速度劣化はどの程度か

うまい言い回しが見つからないのでこんなタイトルになってしまったのだけど。要は、下記の擬似コードのような状態を指している。 for open connection execute sql close connection end foropen connection for execute sql end for close connection一般的…

PCTFREE変えたときのテーブル全選択・全更新・全削除の速度

pctfree 0/10/90に変更してデータ入れて、where条件無しのselect/update/deleteを実行したときに速度差が出るか見る。 環境 Oracle Database Express Edition 11g Release 2をWindows上で動作 Oracle SQL Developer 3.2 SQL*Plus: Release 11.2.0.2.0 Produc…

update単独の更新とループでupdateの速度

テーブルのある範囲を、別のテーブルから抜き出した結果に基づいて更新する、という処理を考える。このとき、単一のupdateのみによる処理と、カーソルで回しながら主キーに基づいてupdateを逐次実行する処理、とでどのような差が発生するかを調べる。 環境 O…