2014-09

【ORACLE】Functionの実行時間はフェッチに大部分含まれる


OracleのFunctionの実行時間はSQLそのものの完了よりはフェッチの部分に大部分が含まれるように感じる。

Functionを呼び出したタイミングではその中身まで深く計算せず、

フェッチしている中で詳細な計算をしていくようなイメージのようである。



SELECT文の問い合わせの”結果”には、

①Oracleからの検索結果返却開始

②全検索結果のフェッチ完了

の2段階のフェーズがあるが、

SELECTする項目の一つ、ないしそのうちの一部として同じ並びで記述するFunctionは、

基本的には前者「①Oracleからの検索結果返却開始」までの間に全て寄っていて、

検索結果が返却される段階ではもう既に計算済みだと思っていた。

だがどうやらそうではない。

実際にはOracleから検索結果が返却されてから、「②全検索結果のフェッチ完了」までの間に

その計算を行っているようである。

「①Oracleからの検索結果返却開始」が開始した段階では、

実際に発行したSELECTの中に含まれるFunctionの計算は行われていないということなのだな。



仕事のとある案件においてプロジェクトで自作した業務Functionの修正を行った際、

修正前後のスピード比較をしたときにふと疑問が浮かび、簡単な実験をして知った。

Oracle的には常識なのかもしれないが自分用のメモ。



見積もり


見積もりに関する社内教育を受けろと言われたので、この前受けてきた。

画面やバッチ等の機能の新規開発における高精度の見積もり手法の紹介と

その基本知識を身に着けることを目的とした教育であった。


息子と新宿ぶらり途中下車の旅

このまえ新宿まで息子(長男)とぶらり途中下車をしてきた サザンテラス前のパン屋さんでキッシュとフロマージュを食した後 フランフラン前のデッキで電

【ORACLE】V$SESSION.BLOCKING_SESSIONについて


Oracleの公式のマニュアルみたいのを見ると

「V$SESSION.BLOCKING_SESSIONにはブロックしているセッションの情報が出力される」

といった内容のことが書かれているが、

主語がないので自セッションから見て

・他セッションにブロックされているのか
・他セッションをブロックしているのか
の判断がつかない。
そしてなんとなく俺は"ブロックしている"という単語だけ見て
「そのセッションは他セッションをブロックしているよ(そのセッションのSIDはこれだよ)」という内容が
V$SESSION.BLOCKING_SESSIONに出てくるのかと思っていたが、どうやら違うようだ。
正しくは「俺はそのセッションにブロックされているよ」のSIDが出力されるようである。

つまり自セッションブロックしているセッションの情報が出力される
という意味になるようだ。
(わかりづれえ…これOracle的にはいちいち書くまでもない常識なのかな?)


ファイル名のYYYYMMDD

仕事で資料作ったりするときに ファイル名に作成した日をつけるのがいつの頃からか昔からの習慣になっている たとえば「20140909_データチェッ

秋味2014

先週か、先々週くらいからか、 ビールの秋タイプのやつが地元のスーパーで出始めている。 8月の最終週から店頭には並んでいるようだ。 8月最終週という