kagamihogeの日記

kagamihogeの日記です。

2013-01-01から1年間の記事一覧

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

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

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

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

Beginning Java EE 6 GlassFish 3で始めるエンタープライズJava

ここんとこJBoss使ってるんだけどJava EEのこと良く知らんのよね、ということで本書を買ってきた。読み進め方としては、気になるトピックに関しては実際に環境作ってHello Worldレベルのこと試す、それ以外は読むだけに留める、というやり方にした。あと、使…

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

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

JAX-RSさわる

Web ServiceさわったらRESTもね、ということで。Hello Worldレベルのことをやる。環境は引き続きWildFly使う。 環境 Java SE Development Kit 7u25 Eclipse Kepler(4.3) IDE for Java EE Developers WildFly 8.0.0.Alpha4 JBoss AS Tools(Kepler) 4.1.0.Fina…

WildFly 8でWeb Serviceさわる

SOAPとかWSDLとかの方のWeb Serviceをさわる。WildFly使うのは趣味。なんとなく新しいバージョン使った方がいいかな〜とかそういう雰囲気。目標は、サンプルのWeb Serviceをサーバ側で起動して、クライアント側からアクセスできるまで。 環境 Java SE Develo…

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

Webエンジニアのための データベース技術実践入門

俺が最近RDBMS関連の勉強をしているのは、Oracleの運用で痛い目にあったからである。危機感というか、いくらなんでも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一般的…

CentOS 6.4をPXEでネットワークインストール

手元にあるThinkPad X61はWindows XPがインストールされているが、そろそろライセンスがアレなのでlinuxをインストールすることにした。しかし、フロッピー・光学ドライブがついてない。USBブートかネットワークブートか、ということになる。ので、PXEでイン…

JUnit実践入門 体系的に学ぶユニットテストの技法

イマサラJUit 4よく知らないんですよね、とは言い出しにくい情勢なので本書を手に取った。さすがに実践入門と銘打たれてるだけあり、明日すぐ使えるような構成になっている。実践的だと感じたのは大きく二つの理由からなる。一つは、JUnit 4の各機能をサンプ…

リレーショナルデータベース入門―データモデル・SQL・管理システム

RDBMSの知識不足を感じて以来、ここのところその勉強に力を入れている。学習方針は、 達人に学ぶDB設計 徹底指南書 初級者で終わりたくないあなたへ - kagamihogeのblog等の著書のミック氏が推奨している方法で、理論と実装の両面から進めている。俺の場合、…

JBoss AS 7.1 + EJB 3.1 + Arquillian動かすところまで

環境 Java SE Development Kit 7u25 Eclipse Kepler(4.3) IDE for Java EE Developers JBoss Application Server 7.1.1 やったこと JBoss Tools 4.1のインストール Help -> Eclipse Marketplaceで「jboss tools」で検索する。 JBoss Tools (Kepler)をインス…

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…

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック

読みやすいコードとはどういうものか、について書かれた薄めの本。非常に興味深い事に、コードの読みやすさについてに書かれていてなおかつ、日本語で読みやすい本となっている。類書で俺個人の好みで言えばClean Code アジャイルソフトウェア達人の技 - kag…

Play FrameworkのWebSocket + html5 canvasで共有ホワイトボード

お絵かきチャット的なアレ。ブラウザでテキトーに何か描くと、別のブラウザにも何かが描画されるヤツ。 環境 jdk1.7.0_21 Eclipse 4.2.0 SR2 play-2.1.1 jQuery 2.0.2 Firefox 21.0 やったこと conf/routesに新しいパス追加する。 GET /sharedwhiteboardinde…

Play FrameworkのWebSocketさわる

Play Frameworkはサンプルでチャットの例が一緒に入っているのだがActorを絡めたコードになっており、ビミョーによくわからなかった。ので、他のWebSocketのサンプルでしばしば見られる、送信したメッセージをただ送りなおす、いわゆる「エコー」をやってみ…

秀丸の文字数カウント

最近の秀丸は、マクロ使わなくても文字数カウントの機能があるって知ったんで試してみた。 環境 Version 8.30 手順とか その他 -> 動作環境 -> ウィンドウのステータースバー「詳細」ボタンを押す。 「全体の文字数(おおよそ)」にチェックを入れる。 秀丸…

ネステッドループジョインと反復連結

反復連結(Loop query)という単語はデータベースパフォーマンスアップの教科書 基本原理編から借りたもの。これは、JOINを使うのではなく、手続き的にテーブル間を連結するもの。親テーブルをフェッチしながら、子テーブルにキーで順次アクセスするやり方の…

歴史の愉しみ方 - 忍者・合戦・幕末史に学ぶ (中公新書)

歴史を専門に扱っている学者なり研究者なりが、成人向けに新書サイズでお手軽に歴史をたのしめるための本を出していることは良くある。ただ、事実に忠実になろうとする余りか堅っ苦しい文体に終始して息が詰まりそうなのとか、無知蒙昧な貴様らに歴史の重み…

インデックス範囲スキャンとフルテーブルスキャンの損益分岐点

損益分岐点というたとえが正確かどうかはわからないが。範囲検索がある一定以上になると、インデックスよりもフルスキャンのほうが速くなるポイントがある。というわけで、それはどのへんにあるのかをやってみる。やることとしては、連番の数値と文字列の2列…

Oracleで適当な件数のテストデータつくる

Oracle勉強していて何気に面倒なのが、テキトーな件数のレコードを持つテーブルを作ること。ので、いままでに自分の知ることが出来た範囲でやり方をメモしていく。 環境 Oracle Database Express Edition 11g Release 2をWindows上で動作 Oracle SQL Develop…

ORACLEハイパフォーマンスチューニングSQL編

2002年発行と今となって古い本であり、9iが一番新しいバージョンという想定で書かれているのでさすがに古さが否めない。RBOへの言及が多かったり、FREELISTSとか、hash_area_sizeとか、11gではメモリ管理なり記憶域管理なりだいぶ変わっているのでその辺は適…

整合性制約の有無によるUPDATEの速度差

整合性制約の有無によるINSERTの速度差 - kagamihogeのblogの続き。整合性制約の有無でUPDATEに速度差が生じるかを確認する。検証する制約は、主キー・チェック・外部キー。制約を付与してからUPDATEするのと、UPDATEしてから制約を付与するのとで、UPDATEの…