2016年9月24日 (土)

VirtualBoxとSIMD

Previously on Mac De Oracle
SIMDのメモをあれこれ貼り付けただけでしたが、実は今回のことを調べてる次いでに見つけたものだったんですよ。



OracleもSIMDを使う操作が多くなりつつあるようなのでどうなんだろというわけで、今回もメモです。

元ネタは以下のエントリ

VirtualBoxゲストでSIMD命令: DB In-Memory
https://blogs.oracle.com/LetTheSunShineIn/entry/virtualboxゲストでsimd命令_db_in_memory

上記は約2年前の記事で現在のVirtualBoxでは、SSE4.1/SSE4.2は有効化されています。
以下ドキュメントを参照のこと。

9.27. Experimental support for passing through SSE4.1 / SSE4.2 instructions
https://www.virtualbox.org/manual/ch09.html#sse412passthrough


ただ、AVXはどうなのか書かれてはいないのでどうなってんのかな〜とか、ググってたら

Ticket #14427 (new defect)
https://www.virtualbox.org/ticket/14427#comment:3
こんな記事を見つけたのであー有効になってるよねーということで、うちの環境での確認

確認に利用したVirtualBoxは現時点の最新版です。

MacBook:˜ lampeyes$ VBoxManage -version
5.1.6r110634
MacBook:˜ lampeyes$


うちのMacファミリーでは最古参w (そろそろなんとか新しいのにしたいなぁ〜w)
古いCPUだけど、マニュアル通り、SSE4.1/4.2はguestでも有効化されていました。おし!

MacPro:˜ lampeyes$ /usr/sbin/system_profiler SPHardwareDataType | grep -E 'Model|Processor|Core|Cache'
Model Name: Mac Pro
Model Identifier: MacPro5,1
Processor Name: 6-Core Intel Xeon
Processor Speed: 2.4 GHz
Number of Processors: 2
Total Number of Cores: 12
L2 Cache (per Core): 256 KB
L3 Cache (per Processor): 12 MB
Processor Interconnect Speed: 5.86 GT/s
MacPro:˜ lampeyes$
MacPro:˜ lampeyes$ grep -E 'Mnemonic|SSE4|AVX' '/Users/lampeyes/VirtualBox VMs/Linux Group/OralceLinux (Oracle12c R1)/Logs/VBox.log'
00:00:02.472827 Mnemonic - Description = guest (host)
00:00:02.472916 SSE4_1 - SSE4_1 support = 1 (1)
00:00:02.472919 SSE4_2 - SSE4_2 support = 1 (1)
00:00:02.472934 AVX - AVX support = 0 (0)
00:00:02.472942 Mnemonic - Description = guest (host)
00:00:02.472951 AVX2 - Advanced Vector Extensions 2 = 0 (0)
00:00:02.472968 AVX512F - AVX512 Foundation instructions = 0 (0)
00:00:02.472978 AVX512PF - AVX512 Prefetch instructions = 0 (0)
00:00:02.472980 AVX512ER - AVX512 Exponential & Reciprocal instructions = 0 (0)
00:00:02.472981 AVX512CD - AVX512 Conflict Detection instructions = 0 (0)
00:00:02.473041 Mnemonic - Description = guest (host)
00:00:02.473103 SSE4A - SSE4A instructions = 0 (0)
MacPro:˜ lampeyes$

続きを読む "VirtualBoxとSIMD"

| | コメント (0) | トラックバック (0)

2016年9月22日 (木)

メモ:SIMDあれこれ

SIMDあれこれ自分メモ

primitive: blog / introdunction to SIMD programming
http://i-saint.hatenablog.com/entry/2015/05/26/212441

wikipedia / Streaming SIMD Extensions
https://ja.wikipedia.org/wiki/Streaming_SIMD_Extensions

続きを読む "メモ:SIMDあれこれ"

| | コメント (0) | トラックバック (0)

2016年9月20日 (火)

Boot Camp de Windows 10 Pro

Previously on Mac De Oracle から結構間が空いてしまった m(_ _)m

VIrtualBoxで一つ、エクスリームなPCで一つWindows Pro環境があるのですが、訳あって、Boot CampでMacBookにもう一つのWindows 10 Pro環境を作った。

Boot Camp を使って Mac で Windows 10 を使う
https://support.apple.com/ja-jp/HT204990

Appleサポートに記載されている手順で楽チン構築でした。ニッコリ。

Windows10pro_withbootcamp_2


続きを読む "Boot Camp de Windows 10 Pro"

| | コメント (0) | トラックバック (0)

2016年8月10日 (水)

Safari起動時に前回参照ページではなく、ホームページを表示したい etc.

Mac で前回と同じウインドウ、App、書類を自動的に開くという機能が働いてSafariを起動すると前回開いていたページを表示したりするようになった。

便利なんだけど、そのページがパスワード変更依頼ぺージだったりすると、次回起動時に再度そのページを送信したりすることがあるw

逆にめんどくさいなー、この機能と思ったら固定ページを表示するようできるんですよね。
(再開機能がなかった頃のようにする方法です)

Safari


続きを読む "Safari起動時に前回参照ページではなく、ホームページを表示したい etc."

| | コメント (0) | トラックバック (0)

2016年7月31日 (日)

個人的に気なるVirtualBox Extension PackのLincenseダイアログの「同意します」ボタンの位置w

久々に役に立たねいネタですw

VirtualBox Extension Packライセンスダイアログの「同意しません」、「同意します」ボタンの位置が、OS Xだけ違ってて、WindowsやLinuxの位置だと思い込み、「同意しません」ボタンをクリックしてしまい、イラッとすることがたまに。

デフォルトボタンになっているので、スペースバー対応すれば逆でも問題はないわけですが、気になる気になるw

続きを読む "個人的に気なるVirtualBox Extension PackのLincenseダイアログの「同意します」ボタンの位置w"

| | コメント (0) | トラックバック (0)

2016年7月19日 (火)

DB Tech Showcase 2016 Tokyo - E35 - SQLチューニング総合診療所的予防医学のセッション資料

DB Tech Showcase 2016 Tokyo - E35 - SQLチューニング総合診療所的予防医学のセッション資料を公開しました。

ぼくとつと、性能試験データの質などのことを言い続ける感じになっていたでしょうか?w

ところで、次回のJPOUG主催のイベントの開催が決まりました。セッション内容は現在準備中ですが、確定次第随時更新します。
お申し込みは以下のイベントベージよりお願いします。

JPOUG in 15 minutes #1

| | コメント (0) | トラックバック (0)

2016年5月 6日 (金)

AirMacベースステーションの拡張ワイヤレスネットワーク設定

AirMacベースステーションの拡張ネットワーク設定のハマリどころ。(含む自分メモ)

昨年末にAirMac ExtremeとAirMac Time Capsuleの2台構成にしようとしてハマったところを書き残そうと思いつつすっかり忘れていた。 orz


マニュアルちゃんと読めよ! 

と妻にも言っている私が、

Apple Supportのエントリに書かれていた一文を読み飛ばすなんて、なんってこったいw
というのがオチだったわけですが。。。 (^^;;;;


以下をしっかりw 読めばハマることはないと思いまっす。  


AirMac ベースステーション:拡張ワイヤレスネットワーク (802.11n) の設定と構成

Wi-Fi base stations: Extending the range of your wireless network by adding additional Wi-Fi base stations

私が読み飛ばしてしまったのは、以下。
”これまでに Wi-Fi ベースステーションを構成したことがある場合は、構成に着手する前に、拡張ワイヤレスネットワークを構成する各 Wi-Fi ベースステーションを工場出荷時の状態にリセットしておいた方がよいでしょう。”

続きを読む "AirMacベースステーションの拡張ワイヤレスネットワーク設定"

| | コメント (0) | トラックバック (0)

2016年4月18日 (月)

Oracle SQL Developer 4.1.x - OUTLINE HINT でるのな


関連エントリ OTHER_XMLの中身

別ネタを作ろうとして気づいた。

Oracle SQL Developer 4.1.1で実行計画を表示すると、普通にOUTLINE HINTというかOther XML列が丸っとリストされてて素敵だったw

20160417_233308

続きを読む "Oracle SQL Developer 4.1.x - OUTLINE HINT でるのな"

| | コメント (0) | トラックバック (0)

2016年3月27日 (日)

OracleのB*Tree索引にはNULLが含まれる場合があるんです! - その性質を使ってチューニングすることもあるよ:) その3


前回までのMac De Oracle

OracleのB*Tree索引にはNULLが含まれる場合があるんです! - その性質を使ってチューニングすることもあるよ:)
OracleのB*Tree索引にはNULLが含まれる場合があるんです! - その性質を使ってチューニングすることもあるよ:) その2

ということで、続きで〜〜すっ。

こんな表定義で

orcl@SCOTT> desc tab01
Name Null? Type
--------- -------- --------
FOO NUMBER
BAR NUMBER
HOGE NOT NULL CHAR(2)
ID NOT NULL NUMBER

こんな索引があって

****** Index column info : tab01 ******

INDEX_NAME COLUMN_NAME DESC
------------------------------ ------------------------------ ----
IX1_TAB01 FOO ASC

IX2_TAB01 BAR ASC
FOO ASC

IX3_TAB01 ID ASC
FOO ASC

IX4_TAB01 ID ASC
BAR ASC
FOO ASC

PK_TAB01 ID ASC


こんなデータで

orcl@SCOTT> set null [NULL]
orcl@SCOTT> select * from tab01

FOO BAR HO ID
---------- ---------- -- ----------
[NULL] [NULL] ** 1
1 [NULL] ** 2
[NULL] 1 ** 3
1 1 ** 4


2列の複合索引、どちらの列もNULLだと、やはり、NULLは索引に含まれないので IS NULL検索だと索引は利用されないですよねぇ〜。このような状態ではヒントで索引利用を強制利用させようとしても無理です。

orcl@SCOTT> r
1 select
2 /*+
3 gather_plan_statistics
4 index(tab01 ix2_tab01)
5 no_index(tab01 ix4_tab01)
6 no_index(tab01 ix3_tab01)
7 */
8 *
9 from
10 tab01
11 where
12 foo is null
13* and bar is null
     
FOO BAR HO ID
---------- ---------- -- ----------
[NULL] [NULL] ** 1

・・・略・・・
-------------------------------------------------------------------------------------
| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers |
-------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | | 1 |00:00:00.01 | 8 |
|* 1 | TABLE ACCESS FULL| TAB01 | 1 | 1 | 1 |00:00:00.01 | 8 |
-------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

1 - filter(("FOO" IS NULL AND "BAR" IS NULL))

でも、NOT NUL制約の列が1列でも含まれている索引であればNULLは索引に含まれます。(前回までの復習も兼ねた確認)
第1列がWHERE句で記述されていないので索引スキップスキャンになっていますが.....IS NULL検索を索引アクセスだけで行っているのがよく分かる例の一つです:)

orcl@SCOTT> r
1 select
2 /*+
3 gather_plan_statistics
4 */
5 *
6 from
7 tab01
8 where
9 foo is null
10* and bar is null

FOO BAR HO ID
---------- ---------- -- ----------
[NULL] [NULL] ** 1

・・・略・・・
--------------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers | Reads |
--------------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | | 1 |00:00:00.01 | 3 | 1 |
| 1 | TABLE ACCESS BY INDEX ROWID BATCHED| TAB01 | 1 | 1 | 1 |00:00:00.01 | 3 | 1 |
|* 2 | INDEX SKIP SCAN | IX4_TAB01 | 1 | 1 | 1 |00:00:00.01 | 2 | 1 |
--------------------------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

2 - access("BAR" IS NULL AND "FOO" IS NULL)
filter(("FOO" IS NULL AND "BAR" IS NULL))


最後にもう少しわかりやすい例を。

SQL文を少々書き換えてIndex Only Scanになるようにしました。索引にNULLが含まれていないと索引だけのアクセスで済むわけがないわけで、これ以上わかりやすい例はないと思います:)

まず、索引が利用できない例から。
FOO列とBAR列だけの複合索引をヒントで強制利用させようとしていますが、この索引は2列ともnullableなので2列をIS NULL検索しても索引が利用されません!
全ての列がNULLである場合、キーエントリーは索引に作成されない。単一列でも複合索引でも同じであることが確認できます。

orcl@SCOTT> r
1 select
2 /*+
3 gather_plan_statistics
4 index(tab01 ix2_tab01)
5 no_index(tab01 ix4_tab01)
6 no_index(tab01 ix3_tab01)
7 */
8 *
9 from
10 tab01
11 where
12 foo is null
13* and bar is null

FOO BAR HO ID
---------- ---------- -- ----------
[NULL] [NULL] ** 1

・・・略・・・
-------------------------------------------------------------------------------------
| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers |
-------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | | 1 |00:00:00.01 | 8 |
|* 1 | TABLE ACCESS FULL| TAB01 | 1 | 1 | 1 |00:00:00.01 | 8 |
-------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

1 - filter(("FOO" IS NULL AND "BAR" IS NULL))

続きを読む "OracleのB*Tree索引にはNULLが含まれる場合があるんです! - その性質を使ってチューニングすることもあるよ:) その3"

| | コメント (0) | トラックバック (0)

2016年3月21日 (月)

OracleのB*Tree索引にはNULLが含まれる場合があるんです! - その性質を使ってチューニングすることもあるよ:) その2

OracleのB*Tree索引にはNULLが含まれる場合があるんです! - その性質を使ってチューニングすることもあるよ:)
の続きです。

念のために、もう一つの主役NULL登場してもらいましょう。

IX1_TAB01索引はNullableなFOO列だけの索引なので、このタイプの索引ではNULLは索引に格納されることはありません。
いくらヒントで索引を指定しても索引にはNULLは格納されていないので全表走査になるはず。

注):索引が多いので意図した索引を利用するようにヒントで固定しています
例2)FOO IS NULL で検索

orcl@SCOTT> r
1 SELECT
2 /*+
3 gather_plan_statistics
4 index(tab01 ix1_tab01)
5 no_index(tab01 ix3_tab01)
6 no_index(tab01 ix4_tab01)
7 */
8 *
9 FROM
10 tab01
11 WHERE
12* foo IS NULL


FOO BAR HO ID
---------- ---------- -- ----------
[NULL] [NULL] ** 1
[NULL] 1 ** 3


ーーー中略ーーー
Plan hash value: 2044041692

-------------------------------------------------------------------------------------
| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers |
-------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | | 2 |00:00:00.01 | 8 |
|* 1 | TABLE ACCESS FULL| TAB01 | 1 | 2 | 2 |00:00:00.01 | 8 |
-------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

1 - filter("FOO" IS NULL)

想定通り。NULLは格納されていないので索引が利用できず全表走査になっています。
索引からROWIDを取得できないので全表走査してフィルタリングしている箇所がポイントです。

OracleのB*Tree索引にはNULLが入らない都市伝説の始まりはここだったんじゃないか? とい言っている方がいたのですが、ここだけの話が広まってしまい

OracleのB*Tree索引にはNULLは絶対格納されない。

という都市伝説になってしまったのだろうと。。確かに入ってないですからねー。 (^^;;;

続きを読む "OracleのB*Tree索引にはNULLが含まれる場合があるんです! - その性質を使ってチューニングすることもあるよ:) その2"

| | コメント (0) | トラックバック (0)

2016年3月20日 (日)

OracleのB*Tree索引にはNULLが含まれる場合があるんです! - その性質を使ってチューニングすることもあるよ:)

先日、OracleのB*Tree索引には絶対にNULLが含まれないって思い込んでる人が意外にいるよね〜とか。
OracleのB*Tree索引には絶対NULLが含まれないって都市伝説があるのはなんでだろう。
Oracle® Database概要12cリリース1 (12.1) - 一意索引と非一意索引

みたいなことが話題になって、
ある一人が、「だよね〜、ダンプ見れば含まれてるのわかります。」って言ってて、それ、ふつ〜の人は見ないからw

と思いつつ、私の周りには、やはり、変態が多いことに改めて気づいた次第です。:) はい。


で、
変態じゃない、ごく一般的なエンジニアの方々(ブロックダンプを華麗かつ自然にキメちゃわない方々)向けに、

OracleのB*Tree索引にNULLが含まれているか、NULLが含まれていないかの簡単な確認方法をお伝えしなければ!w

ということで、数回にわけて書いておこうかと思ってます。(予定は未定w)

(実は、このネタとほぼ同じことを1年前ぐらい前に、ローカルかつクローズドな勉強会?、でも使ってました。 最近、やってないみたいですけど)

環境は最近の定番 Oracle Database 12c R1 EE

orcl@SCOTT> select banner from v$version;

BANNER
--------------------------------------------------------------------------------
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
PL/SQL Release 12.1.0.2.0 - Production
CORE 12.1.0.2.0 Production
TNS for Linux: Version 12.1.0.2.0 - Production
NLSRTL Version 12.1.0.2.0 - Production


SCOTTスキーマに以下のような表と索引を作成し少ないですが、データを登録
今回の主役は索引とNULLなのでデータ量少なくても必要なパターンが登録できていれば十分です。
(データ量を増やせばチューニングのお題の元ネタにもなると思います。)

orcl@SCOTT> create table tab01 (foo number, bar number, hoge char(2) not null,id number not null);

Table created.

orcl@SCOTT> insert into tab01 values(null,null,'**',1);

1 row created.

orcl@SCOTT> insert into tab01 values(1,null,'**',2);

1 row created.

orcl@SCOTT> insert into tab01 values(null,1,'**',3);

1 row created.

orcl@SCOTT> insert into tab01 values(1,1,'**',4);

1 row created.

orcl@SCOTT> commit;

Commit complete.

orcl@SCOTT> alter table tab01 add constraint pk_tab01 primary key(id) using index;

Table altered.

orcl@SCOTT> exec dbms_stats.gather_table_stats(ownname=>'SCOTT',tabname=>'TAB01',cascade=>true,no_invalidate=>false);

PL/SQL procedure successfully completed.

orcl@SCOTT> create index ix1_tab01 on tab01 (foo);

Index created.

orcl@SCOTT> create index ix2_tab01 on tab01 (bar,foo);

Index created.

orcl@SCOTT> create index ix3_tab01 on tab01(id,foo);

Index created.

orcl@SCOTT> create index ix4_tab01 on tab01(id,bar,foo);

Index created.


FOOとBAR列はNullableにしています

orcl@SCOTT> desc tab01
Name Null? Type
----------------------------------------- -------- ----------------------------
FOO NUMBER
BAR NUMBER
HOGE NOT NULL CHAR(2)
ID NOT NULL NUMBER

主演の索引たち

NULLが索引でどう扱われるかを確認するため、事前作成の索引をたくさん用意してしました。後から作るの面倒なのでw
これだけ類似索引も含めて多数の索引があると確認時に意図した索引が利用されない可能性も高いため、検証では内容に合わせて利用する索引をヒントで指定することにします。

ちなみに、
普通の環境でこんなに索引があったら、アンチパターン:インデックスショットガンですからね。ご注意ください:) たまにこのような環境に遭遇することはありますが。。。

IX1_TAB01はnullableなFOO列だけの単一列索引
IX2_TAB01はnullableなBAR列とFOO列からなる複合索引
IX3_TAB01とTX4_TAB01は上記の列に加え主キー列のID列を第1キーとする複合索引

としてあります。

orcl@SCOTT> break on table_name on index_name skip 1
orcl@SCOTT> select table_name,index_name,column_name from user_ind_columns where table_name='TAB01' order by table_name,index_name,column_position;

TABLE_NAME INDEX_NAME COLUMN_NAME
------------------------------ ------------------------------ ------------------------------
TAB01 IX1_TAB01 FOO

IX2_TAB01 BAR
FOO

IX3_TAB01 ID
FOO

IX4_TAB01 ID
BAR
FOO

PK_TAB01 ID

登録したデータは以下の通り
NULLは索引とともに今回の主役なので、どこがNULLになっているかメモしておいてくださいませ。

orcl@SCOTT> set null [NULL]
orcl@SCOTT> select * from tab01 order by id;

FOO BAR HO ID
---------- ---------- -- ----------
[NULL] [NULL] ** 1
1 [NULL] ** 2
[NULL] 1 ** 3
1 1 ** 4

続きを読む "OracleのB*Tree索引にはNULLが含まれる場合があるんです! - その性質を使ってチューニングすることもあるよ:)"

| | コメント (0) | トラックバック (0)

2016年3月19日 (土)

Relational Database Index Design and the Optimizers [Kindle版]とUSE THE INDEX, LUKE

時代は繰り返すw のか? という感じで何周目かのIndex only scanとかのネタを元にした資料とか作ることが多くて。。。

索引の設計って、基本的に、機械的だと思っているのですが、皆さんはどう思っているのか気になる今日この頃。
初心者ならともかく、そうでもない感じの方が、腕組みして、眉間にしわ寄せてるのをみるとちょっと心配になっちゃったり。


と昨日のtwで見かけたやつとかも含めて参考になりそうな書籍を載せておきますね。

最初は私のお気に入りの一冊(ハードカバー本でしたが、最近kindle版がでてました。そして私が買った時より高いw
この書籍は2011 db tech showcaseでTom Kyteさんが紹介していたもので、速攻でポチった記憶があります。
そしてその頃は、8,000円台でしたw(円高だったからねぇ)

この書籍ではCovering Index → FAT Index / Semi Covering Index → Semi FAT Indexと記載されています。

Web上でも読めるんですが、書籍化されPDF版もでてます。
SQLパフォーマンス詳解(原文タイトルSQL Performance Explained)


USE THE INDEX, LUKE - 開発者のためのSQLパフォーマンスの全て

| | コメント (0) | トラックバック (0)

2016年3月17日 (木)

こんなのでいいのかなぁ。ズンドコキヨシ  ObjectScript / MUMPS


2016/3/18追記#3

よ〜く見てたら、ズン!は4回だったw 結局この83文字のパターンマッチング版でよかったのか〜〜w (おしまい)

S l="",w(0)="ズン!",w(1)="ドコ!" F  S l=l_w($R(2)) I l ?.E4"ズン!"1"ドコ!" W !,l,"キ・ヨ・シ!" Q

USER>S l="",w(0)="ズン!",w(1)="ドコ!" F  S l=l_w($R(2)) I l ?.E4"ズン!"1"ドコ!" W !,l,"キ・ヨ・シ!" Q

ズン!ズン!ドコ!ズン!ドコ!ドコ!ズン!ズン!ドコ!ズン!ズン!ドコ!ドコ!ズン!ドコ!ドコ!ドコ!ズン!ドコ!ズン!ドコ!ズン!ドコ!ドコ!ズン!ズン!ズン!ズン!ドコ!キ・ヨ・シ!


2016/3/18追記#2

旧構文のFORとIFを使えば82文字まで短縮できた。

S l="",w(0)="ズン!",w(1)="ドコ!" F  S l=l_w($R(2)) I l["ズン!ズン!ズン!ドコ!" W !,l,"キ・ヨ・シ!" Q

USER>S l="",w(0)="ズン!",w(1)="ドコ!" F  S l=l_w($R(2)) I l["ズン!ズン!ズン!ドコ!" W !,l,"キ・ヨ・シ!" Q

ドコ!ズン!ズン!ドコ!ドコ!ズン!ドコ!ズン!ズン!ズン!ズン!ズン!ドコ!キ・ヨ・シ!


調子に乗ってパターンマッチに書き換えたら1文字増えて83文字w orz

S l="",w(0)="ズン!",w(1)="ドコ!" F  S l=l_w($R(2)) I l ?.E3"ズン!"1"ドコ!" W !,l,"キ・ヨ・シ!" Q

USER>S l="",w(0)="ズン!",w(1)="ドコ!" F  S l=l_w($R(2)) I l ?.E3"ズン!"1"ドコ!" W !,l,"キ・ヨ・シ!" Q

ズン!ズン!ドコ!ドコ!ズン!ズン!ドコ!ズン!ズン!ズン!ドコ!キ・ヨ・シ!



2016/3/18追記

85文字までに縮めたw もうむりか?

S l="",w(0)="ズン!",w(1)="ドコ!" F {S l=l_w($R(2)) I l["ズン!ズン!ズン!ドコ!" {W !,l,"キ・ヨ・シ!" Q}}

USER>S l="",w(0)="ズン!",w(1)="ドコ!" F {S l=l_w($R(2)) I l["ズン!ズン!ズン!ドコ!" {W !,l,"キ・ヨ・シ!" Q}}

ズン!ズン!ドコ!ドコ!ズン!ズン!ドコ!ズン!ズン!ドコ!ズン!ドコ!ドコ!ズン!ズン!ズン!ドコ!キ・ヨ・シ!

こんなのでいいのかなぁ。ズンドコキヨシ

もっといいのが浮かびそうだっただけど、眠気で頭まわらなくなってきたので、一旦これでw

ズンドコキヨシまとめ


M言語というか、MUMPSというか、Caché ObjectScriptでやっつけてみた

S s=0 F {S r=$R(2) W !,$CASE(r,0:"ズン!",1:"ドコ!") S s=$CASE(r,0:$CASE(s,0:1,1:2,2:3,:3),1:$CASE(s,3:4,:0)) W:s=4 !,"キ・ヨ・シ!" Q:s=4}
USER>S s=0 F {S r=$R(2) W !,$CASE(r,0:"ズン!",1:"ドコ!") S s=$CASE(r,0:$CASE(s,0:1,1:2,2:3,:3),1:$CASE(s,3:4,:0)) W:s=4 !,"キ・ヨ・シ!" Q:s=4}

ズン!
ズン!
ドコ!
ドコ!
ドコ!
ズン!
ドコ!
ズン!
ズン!
ドコ!
ズン!
ドコ!
ドコ!
ズン!
ズン!
ドコ!
ズン!
ズン!
ズン!
ズン!
ズン!
ズン!
ズン!
ドコ!
キ・ヨ・シ!

USER>halt
[oracle@pleco ˜]$

| | コメント (0) | トラックバック (0)

2016年3月13日 (日)

FAQ になりそうな、12c MTA環境での統計履歴管理 ー CDBとPDBの間で迷子になりそう PART2

PART1ってあったっけ? というのは置いといて、
PART III以降もなにかありそうなアトモスフィアなのですが、ここで書いておかないとハマりそうなので備忘録代わりに。


みなさん、統計履歴って知ってます?
dbms_stats.gather_*_stats を実行するとオプティマイザ統計情報が取得された表、索引、列統計が自動的にバックアップされることを。
そのバックアップは統計履歴と呼ばれています。(履歴統計と呼んでる人のほうが多いと思うのですが。。。マニュアルだと統計履歴って書いてますね。。。。誰も履歴統計を統計履歴だろ、それ! と突っ込んでくれなてなかった気がw)

Oracle® Database SQLチューニング・ガイド 12cリリース1(12.1) オプティマイザ統計の保存の管理
Oracle® Database PL/SQLパッケージおよびタイプ・リファレンス 12c リリース1(12.1) DBMS_STATS.GET_STATS_HISTORY_RETENTIONファンクション
Oracle® Database PL/SQLパッケージおよびタイプ・リファレンス 12c リリース1(12.1) DBMS_STATS.ALTER_STATS_HISTORY_RETENTIONプロシージャ
Oracle® Database PL/SQLパッケージおよびタイプ・リファレンス 12c リリース1(12.1) PURGE_STATSプロシージャ
Oracle® Database SQL言語リファレンス 12cリリース1 (12.1) SYS_CONTEXT


で、オプティマイザ統計収集が原因と思われる事象があった場合、統計履歴をリストアしてトラブルを華麗に回避なんて手法もあるんです。
古くは小田さんの記事でも取り上げられています。
門外不出のOracle現場ワザ 第4章 Oracleデータベースの頭脳 「オプティマイザ」徹底研究


と、ここまでは、11gとか12cでも非MTA環境のお話です。

続きを読む "FAQ になりそうな、12c MTA環境での統計履歴管理 ー CDBとPDBの間で迷子になりそう PART2"

| | コメント (0) | トラックバック (0)

2016年2月14日 (日)

JPOUG Tech Talk Night #6 @ 21cafe


2016/3/5追記

JPOUG Tech Talk Night #6 - Togetterまとめ
http://togetter.com/li/943287



2/23(火) - 19:00 - 20:30 に今年最初のJPOUG Tech Talk Night #6 (すでに満席ですが....) を開催しま〜す。

詳細は以下⇩⇩⇩⇩⇩
JPOUG Tech Talk Night #6
doorkeeper : JPOUG Tech Talk Night #6
Oracle Database の オプティマイザ統計運用 について語ります



たん、たん、たぬきの....か〜〜ぜもないのに、ぶ〜らぶら

5452836527_d7794263f7_o
https://www.flickr.com/photos/small-life/albums/72157625948037655
(CC BY-NC 2.0) Attribution-NonCommercial 2.0 Generic

的なところが話題になるんでしょうかね?


でも、
風もないのにぶ〜らぶらしないのが実行計画

続きを読む "JPOUG Tech Talk Night #6 @ 21cafe"

| | コメント (0) | トラックバック (0)