kagamihogeの日記

kagamihogeの日記です。

Oracle

WildFlyでSpringのJTA設定

JTAの実体はWildFlyを使用してSpringの設定を行う。 環境 jdk1.8.0_131 Eclipse 4.6.3 WildFly Full 10.1.0.Final ubuntu 16.04 Oracle Database 11g Release 2(11.2.0.1.0) Enterprise Edition PostgreSQL 9.5.6 ojdbc6.jar postgresql-42.1.1.jar 事前準備…

SQL Developer 4.2 Early Adopter 2のInstance ViewerのTop SQL

www.thatjeffsmith.com SQL Developerには4.1にinstance viewerというDBの現在の実行状態をグラフィカルに表示するツールが追加されている。4.2では更にTop SQLという機能が追加されるらしい。ので、実際に試してみる。instance viewerについは SQL Develope…

spring-batchでCSV出力

最近になって知ったのだけど、spring-batchには原始的ではあるものの良くある処理についてはクラスが用意されている。例えばSQL食わせるとreaderとして実行してくれるヤツとか。既存部品だけで素朴なものCSV出力くらいなら作れるっぽかった。なので、xmlのbe…

SQL Developer 4.1の新機能Multi-Cursor Editing, SQL Logging, Import Data Wizardを試す

環境 DB CentOS-6.5-x86_64 Oracle Database 11g Release 2(11.2.0.1.0) Enterprise Edition Java Java SE Development Kit 8u51 ツール Oracle SQL Developer 4.1.1(4.1.1.19) General Enhancments SQL Developer 4.1 New FeaturesによるとBy popular deman…

SQL Developer 4.1の新機能Instance Viewerを試す

環境 DB CentOS-6.5-x86_64 Oracle Database 11g Release 2(11.2.0.1.0) Enterprise Edition Java Java SE Development Kit 8u51 ツール Oracle SQL Developer 4.1.1(4.1.1.19) Instance Viewerの公式の説明 データベースの状態をグラフィカルに表現する新し…

SQL実践入門──高速でわかりやすいクエリの書き方

俺は実務経験をある程度こなしたあと、RDBの知識不足を認識したクチである。改めてRDBを勉強し始めて困ったことの一つは、実行計画の読み方がよくわからないことだった。もちろん、ぐぐればNESTED LOOP JOINが何かとかは出てくるし、公式のマニュアルも参考…

UPDATE10万件をマルチスレッドで分割

10万件のUPDATEをマルチスレッドで分割した場合、実行時間にどのような影響があるか。実際にやってみる。 環境 DB CentOS-6.5-x86_64 Oracle Database 11g Release 2(11.2.0.1.0) Enterprise Edition Java Java SE Development Kit 8u31 Eclipse Luna(4.4.1)…

インデックスがタクサンあるときのINSERTとUPDATEの速度

一般的に、インデックスを作りすぎるとINSERTやUPDATEのパフォーマンスに影響を与えるため、よろしくないとされている。今回は実際にはどういう現象を発生させるのか、を見てみる。 やること 100列のテーブルを作り、INSERTとUPDATEの速度を、インデックス数…

UPDATEのINSERT SELECT置換から学ぶ

概要 シバタツ流! DWHチューニングの極意 第4回 SQL書き換えテクニックによると、DWHにおけるUPDATEをダイレクトパスインサートを用いたINSERT /*+ APPNED */ INTO ... SELECT ...に置き換えることで高速化を見込める、というテクニックが紹介されている。…

Oracle Flashback QueryをSQL Developerでつかう

Oracle Flashback Technologyという機能は、たとえばついうっかりDELETEしちゃった行を元に戻すのに使える。EE以上で使用可能。SQL Developerに依存する機能ではないが、SCNの確認程度には便利なので、せっかくなので使う。 環境 DB CentOS-6.5-x86_64 Oracl…

Oracleのビットマップインデックスのロックを学ぶ

Oracleのビットマップインデックスを学ぶ - kagamihogeのblogでは、基本的な使い方とその構造について学習した。次に、一般的な解説として、ビットマップインデックスは更新時にビットマップ全体をロックするのでオンライン向けの機能では無い、とされること…

Oracleのビットマップインデックスを学ぶ

@kagamihoge ppは基本的にOracleサイトから落とせますよ( ^ω^) 商用利用せずに個人で実験するレベルであれば、製品版と同じ物を使用できますよ☆ xeは機能制限が多くて、、、— かーりん (@curry9999) August 5, 2014 OTN開発者ライセンス付きのソフトウエア…

30 SQL Developer Tips in 30 Daysをテキトーに訳した(16~30)

30 SQL Developer Tips in 30 Daysをテキトーに訳した(1~15) - kagamihogeの日記 ↑の続きの16~30です。 30 SQL Developer Tips in 30 Days, Day 16: Comparing In-Memory Results with Autotrace まず、このTipsはversion 4.0.3以上にアップグレードして…

30 SQL Developer Tips in 30 Daysをテキトーに訳した(1~15)

http://www.thatjeffsmith.com/のaboutによるとProduct Manager for Oracle, working on the SQL Developer teamという方が主にSQL Developerについて書かれているブログがあります。詳しい経緯は不明ですがSQL DeveloerのTipsについて30日間連続で書き続け…

jBatchでデータロードしてみる

やること jBatchを使用してテキストファイルの中身をOracleにロードする。 とはいえ、単なるデータロードであればワザワザjBatchを使うのはオーバーヘッドがかさむだけである。OracleでSQL*Loaderや、手動ならSQL DeveloperやA5:SQL等各種のツールを使うのが…

一回のSQLで明細・小計・総計を集計する

やりたいこと 下図のイメージのように、左側のデータを基に、右側の集計表を作りたい、とする。ポイントは、テーブル全体の販売個数だけでなく、種類ごとの小計、種類と名前ごとの小計も出力する。さらに加えて、明細行も一緒に出す、というのをやりたい。 …

Oracleの空コミットは別セッションのトランザクションに影響を与えるか

Oracleの空コミット負荷はどのくらいか - kagamihogeの日記の続き。これを書いたときに芽生えた疑問があった。それは、あるセッションがDMLを伴うトランザクションをしているとき、それとは別のセッションが空コミットをしたら前者のトランザクションに影響…

Oracle Database 11g Release 2 Client (11.2.0.1.0) for Microsoft Windowsのインストール

環境 Windows7 64bit 手順とか まずはブツを手に入れる。 64bit:Oracle Database 11g Release 2 for Microsoft Windows (x64)からwin64_11gR2_client.zipをダウンロードする。 32bit:Oracle Database 11g Release 2 for Microsoft Windows (32-bit)からwin32…

Oracleの空コミット負荷はどのくらいか

空コミットとは、あるトランザクションでDMLの実行は無いがコミットする、ことを指す。一般的に通用する用語かどうかは謎だが、ひとまずこのエントリ内ではそういうもんとして話を進める。Oracleでコレがどういう時に現れるかというと、たとえばFOR UPDATE句…

OracleからのCSV出力を考える

軽くぐぐっただけなので間違っているかもしれないが、OracleにはCSV出力の機能なりAPIなりは備わっていない。ただし、SQL*PlusのコマンドであるとかPL/SQLを使うとかでCSV出力は実現出来る。今回のエントリでは、自分が調べられた範囲内でCSV出力の方法を色…

Oracle11gのPL/SQLのネイティブコンパイル

Oracle11gのPL/SQLのネイティブコンパイルを試す。 環境 DB CentOS-6.4-x86_64 Oracle Database Express Edition 11g Release 2 ツール Oracle SQL Developer 4.0(4.0.0.13.80) RLogin Version 2.14.7 やったこと 検証用プログラム どういう速度計測プログラ…

SQLトレースさわる

環境 DB CentOS-6.4-x86_64 Oracle Database Express Edition 11g Release 2 ツール Oracle SQL Developer 4.0(4.0.0.13.80) RLogin Version 2.14.7 SQLトレースの取得 Oracle Database PL/SQLパッケージおよびタイプ・リファレンス11g リリース2(11.2) DBMS…

SQL DeveloperのSVN機能のメモ

環境 Oracle SQL Developer 4.0(4.0.0.13.80) RLogin Version 2.14.7 TortoiseSVN 1.8.4.24972 やったこと りポジトリのチェックアウトと編集 チーム -> Subversion -> チェックアウトと進む。初回のみSubversion関連のプラグインと思しきものの調整でやや時…

コミットせずINSERTし続ける

OracleのPL/SQLを使い無限ループでINSERTをし続けると何が起きるのか、をやる。実際には適当なところでキャンセルをかけたが、その理由も含めて表領域の状態やstatspackレポートの中身を見て何が起きるのかを確認していく。 環境 DB CentOS-6.4-x86_64 Oracl…

ライブラリキャッシュにヒットしないSQLを流し続けたときのstatspackを見る

statspackの使用例としてしばしば見かけるものの一つに、ライブラリキャッシュのヒット率がある。Oracleでは同一と見なされないSQLの書き方とかバインド変数の効果とかについての記述と共に記されることが多い。また、ヒット率はおおむねどの文献でも95%~9…

どのようにOracleを勉強してきたか

一昨年から去年にかけては、リレーショナルデータベースの分野の学習に注力すべく活動を続けてきた。具体的なRDBMSのプロダクトはそのときの仕事で使っていたという理由で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 を書いたあと、下記の本をあらためて見直したところ、このような記述となっていた。 データを削除するとテーブルの行は物理的に削除されるが、インデックスの行は単に…