2024年6月 3日 (月)

DTM / 5月に公開した曲

毎月のルーティーンw

5月に公開したループ一覧
先月は、1つ作ってそのリズムトラックが面白かったのでダブバージョン作って勢いで、マイナーアップデートまでw

まず1曲目

Fallen Leaves Loops Ver.1.2 - Dub version of Sunny Spot Loops / N + 1 Loops

Fallen Leaves Loops のマイナーバージョンアップです。パーカッションなど追加。


Summer Sea Breeze Loops / N + 1 Loops

夏っぽい何かを作ろうと思ってたらこうなってしまったw。この曲のリズムトラック、ベースのループをチョップしまくってますw


Memories - Summer Sea Breeze Loops version / N + 1 Loops

Summer Sea Breeze LoopsMemories Loops Ver. 1.1 をmixしてMemories側に寄せたDub versionってところを狙ったつもりw 
なので、タイトルは、 Memories - Summer Sea Breeze Loops versionに。


Nu Funky Loops in Clouds ( Dance Edittion ) / N + 1 Loops

Summer Sea Breeze LoopsMemories Loops Ver. 1.1 をミックスした Memories - Summer Sea Breeze Loops versionのリズムセクションと、Loops in cloudsCity Lights Loopsの一部を混ぜ込んだ曲ですが、Loops in cloudsに寄せたので、その後継バージョンw
ループの再利用とかガレバンっぽい使い方なのではないかと。。:)


最後は、一つ前の曲のマイナーアップデート
Nu Funky Loops in Clouds ver. 1.1 / N + 1 Loops

Nu Funky Loops in Cloudsのマイナーアップデート、困った時のw VOXとHand Clapトラック追加でw。



続きを読む "DTM / 5月に公開した曲"

| | | コメント (0)

2024年5月31日 (金)

VirtualBox TestBuild 7.0.97r163376 (2024-05-28T15:08:56Z) for macOS/ARM64における現時点でのOracle Database 21cの起動、停止時間の記録

VirtualBox TestBuild 7.0.97r163376 (2024-05-28T15:08:56Z) / macOS/ARM64 Dev Previewがリリースされていたので、いつもの、起動確認と、Oracle Database 21cの起動時間比較を。
前回の記録は、VirtualBox TestBuild for macOS/ARM64における現時点でのOracle Database 21cの起動、停止時間の記録 / 7.0.97r162957(2024/4/26) / 7.0.97r163029(2024/5/3)を見てもらうとして、結果的には大きくな変化なし!。

頑張って! :) 

oracle@Mac-Studio ~ % ./print_env.sh 

*** mac info. ***
ProductName: macOS
ProductVersion: 14.5
BuildVersion: 23F79

*** maxOS ver. ***
Model Name: Mac Studio
Chip: Apple M1 Ultra
Total Number of Cores: 20 (16 performance and 4 efficiency)
Memory: 64 GB

*** VirtualBox ver. ***
7.0.97r163376

Oracle Database 21c Mac Studio M1

起動1回目 : 217sec
停止1回目 : 153sec
起動2回目 : 186sec
停止2回目 : 119sec


oracle@angelfish ~ % ./print_env.sh 

*** mac info. ***
Model Name: MacBook Air
Chip: Apple M2
Total Number of Cores: 8 (4 performance and 4 efficiency)
Memory: 24 GB

*** macOS ver. ***
ProductName: macOS
ProductVersion: 14.5
BuildVersion: 23F79

*** VirtualBox ver. ***
7.0.97r163376

Oracle Database 21c MacBook Air M2

起動1回目 : 138sec
停止1回目 : 108sec
起動2回目 : 128sec
停止2回目 : 83sec



20240531-81713

続きを読む "VirtualBox TestBuild 7.0.97r163376 (2024-05-28T15:08:56Z) for macOS/ARM64における現時点でのOracle Database 21cの起動、停止時間の記録"

| | | コメント (0)

2024年5月29日 (水)

帰ってきた! 標準はあるにはあるが癖の多いSQL #10、BOOLEAN型にも癖が出る(後編)の おまけ - SQL*PlusのautotraceでSQL Analysis Reportが出力される! (23ai〜)

ちょっと意地悪してみました。

 

前回のエントリで、以下のようにindex only scanにできるBOOLEAN型の単列索引を作成したのを覚えていますか?

 

SCOTT@freepdb1> create index ix_bool_example2 on example2(b1);

Index created.

SCOTT@freepdb1> set autot trace exp stat
SCOTT@freepdb1> select count(1) from example2 where b1;

Execution Plan
----------------------------------------------------------
Plan hash value: 1159143718

--------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 1 | 1 (0)| 00:00:01 |
| 1 | SORT AGGREGATE | | 1 | 1 | | |
|* 2 | INDEX RANGE SCAN| IX_BOOL_EXAMPLE2 | 16 | 16 | 1 (0)| 00:00:01 |
--------------------------------------------------------------------------------------

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

2 - access("B1"=TRUE)

Statistics
----------------------------------------------------------
1 recursive calls
0 db block gets
3 consistent gets
0 physical reads
0 redo size
586 bytes sent via SQL*Net to client
108 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed

 

この状態で、述語のBOOLEAN列(索引列)に暗黙型変換が発生する意地悪をしてみました。
BOOLEAN列を数値として計算した後に、falseと比較しているので、TO_NUMBER() の後に、TO_BOOLEAN()されています。当然、索引は使えなくなるので index only scan から table access fullに変わっています! (狙い通りですね。こんなことしないと思いますけどもw

 

で、みなさん、SQL*Plusのautoraceに見慣れない情報が出力されているのに気づきませんか!?

 

そう、Oracle Database 23ai free developerでは、SQL*PlusのautotraceでSQL Analysis reportが表示され、index range scan できるよう、述語の書き換えをご検討くさい! とレコメンドされています!(赤字部分)

 

このメッセージカスタマイズできたりしたらw 「チッ、少しは考えたSQL書けよな〜。」と上から目線のメッセージに変えてみたいw(無理でしょうけどもw) 

続きを読む "帰ってきた! 標準はあるにはあるが癖の多いSQL #10、BOOLEAN型にも癖が出る(後編)の おまけ - SQL*PlusのautotraceでSQL Analysis Reportが出力される! (23ai〜)"

| | | コメント (0)

帰ってきた! 標準はあるにはあるが癖の多いSQL #10、BOOLEAN型にも癖が出る(後編)

Previously on Mac De Oracle
前回は、BOOLEAN型に使える値の差異について、Oracle Database 23ai/PostgreSQL/MySQLで比較してみました。 なかなか癖がありますよね。それぞれw Oracle Database 23aiは、Db2やSnowflakeの仕様に類似していそうでしたよね。(未検証ですが)
ということで、5月もラストスパートwで、BOOLEANネタ後編で締めたいと思いますw

 

BOOLEAN/BOOL型どちらでもOKということなので、一応確認しておきます。

 

Oracle Database


SCOTT@freepdb1> create table sample3 (b1 boolean, b2 bool);

Table created.

SCOTT@freepdb1> desc sample3
Name Null? Type
----------------------------------------- -------- ----------------------------
B1 BOOLEAN
B2 BOOLEAN

SCOTT@freepdb1> drop table sample3 purge;Table dropped.

 

 

PostgreSQL


perftestdb=> create table sample3 (b1 boolean, b2 bool);
CREATE TABLE
perftestdb=> \d sample3
テーブル"public.sample3"
列 | タイプ | 照合順序 | Null 値を許容 | デフォルト
----+---------+----------+---------------+------------
b1 | boolean | | |
b2 | boolean | | |

perftestdb=> drop table sample3;
DROP TABLE
perftestdb=>

 

MySQL


mysql> create table sample3 (b1 boolean, b2 bool);
Query OK, 0 rows affected (0.27 sec)

mysql> desc sample3;
+-------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| b1 | tinyint(1) | YES | | NULL | |
| b2 | tinyint(1) | YES | | NULL | |
+-------+------------+------+-----+---------+-------+
2 rows in set (0.04 sec)

mysql> drop table sample3;
Query OK, 0 rows affected (0.10 sec)

 

 

次は、データサイズ。
MySQL/PostgreSQLそれぞれマニュアルにて、1バイトと記載されていますが、Oracle Databaseでは発見できす(仕方ないので直接確認してみますw)
PostgreSQL - https://www.postgresql.jp/document/13/html/datatype-boolean.html MySQL BOOLEAN = TINYINT - https://dev.mysql.com/doc/refman/8.0/ja/other-vendor-data-types.html MySQL TINYINTのサイズ - https://dev.mysql.com/doc/refman/8.0/ja/integer-types.html

 

Oracleも1バイトのようですね!

 


SCOTT@freepdb1> set null [null]
SCOTT@freepdb1> col dump(b1) for a30
SCOTT@freepdb1> col vsize(b1) for 9990
SCOTT@freepdb1> select dump(b1),vsize(b1) from example2

DUMP(B1) VSIZE(B1)
------------------------------ ---------
Typ=252 Len=1: 1 1
Typ=252 Len=1: 1 1
Typ=252 Len=1: 1 1
Typ=252 Len=1: 1 1

...中略...

Typ=252 Len=1: 0 1
Typ=252 Len=1: 0 1
Typ=252 Len=1: 0 1
Typ=252 Len=1: 0 1
NULL [null]

33 rows selected.

 

 

続きを読む "帰ってきた! 標準はあるにはあるが癖の多いSQL #10、BOOLEAN型にも癖が出る(後編)"

| | | コメント (0)

帰ってきた! 標準はあるにはあるが癖の多いSQL #9、BOOLEAN型にも癖が出る

PostgreSQL/MySQLには実装済みだった Boolean型がやっとOracle Database 23aiで追加されました。長ーい間実装されなかったデータ型なので、number型を使ったりして代替されていたわけですが、23ai以降は普通に使えるってことですね。
ただ、タイトルの通り、標準はあるものの、それぞれの実装には癖があります!!!!w


どのような癖があるのか、知っておきましょう。 (兼、自分用メモ)
Oracle/PostgreSQL/MySQLで違いを見てみます。

Oracle Database 23ai

SCOTT@freepdb1> select banner_full from v$version;

BANNER_FULL
--------------------------------------------------------------------------------
Oracle Database 23ai Free Release 23.0.0.0.0 - Develop, Learn, and Run for Free
Version 23.4.0.24.05

PostgreSQL
例によってw こちらの都合により、13.14を使っています。

perftestdb=> select version();
version
----------------------------------------------------------------------------------------------------------
PostgreSQL 13.14 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 8.5.0 20210514 (Red Hat 8.5.0-20), 64-bit
(1 行)

MySQL

mysql> select version();
+-----------+
| version() |
+-----------+
| 8.0.36 |
+-----------+
1 row in set (0.02 sec)



データ登録時、どの値がBOOLEANとして扱われるのかマニュアルから拾った値を元に確認しておきたいと思います。キャストが必要だったりする場合には、暗黙型変換とか気にしておいた方が良いですからね。索引にも使えるデータ型ですし。。。

続きを読む "帰ってきた! 標準はあるにはあるが癖の多いSQL #9、BOOLEAN型にも癖が出る"

| | | コメント (0)

2024年5月19日 (日)

構文図で見る、SELECT文の構文拡張の歴史 w

2015年にイベント開催のコメントおまけで、Oracle DatabaseのSQLからSELECT文の構文拡張の歴史をOracle Database 7.3と12.1版のマニュアルに記載されている構文図の長さを使って可視化したことがあったのですが、覚えているでしょうか?w (多分、忘れてますよねw)

 

JPOUG> SET EVENTS 20151017 を開催します!

 

Oracle Database 23aiがリリースされてSQLシンタックスの拡張をマニュアルをつらつら読んでて思ったのですが、色々拡張されてますよね!
ということで、Oracle Database 7.3 / 8i 8.1.6 / 12cR1 12.1 / 23ai それぞれのSELECT文の拡張の歴史を構文図の長さを使って、今一度、可視化して残しておこうと思います。

 

みなさん、SQLの進化というか拡張に、追いつけていますよね。。。ね。。。。ね!? (大変ですけどもw)

 

各バージョンのSELECT文の構文図のソースは以下です。みなさんもマニュアルのページ数の増加や構文図の拡張に着目しつつ追ってみるのも楽しいかもしれません。  

 

Oracle7 Server SQL Reference Manual - SELECT
Oracle8i SQL Reference Release 2 (8.1.6) - SELECT and Subqueries
Database SQL Language Reference 12c 12.1 - SELECT
SQL Language Reference - Oracle Database 23ai - SELECT

 

 

 

続きを読む "構文図で見る、SELECT文の構文拡張の歴史 w"

| | | コメント (0)

2024年5月16日 (木)

GROUP BY列の別名または位置の指定が可能に! / 23ai〜 / SQL / FAQ

23c 改め、23ai になった Oracle Database 23aiですが、SQLの使い勝手の改善がいくつか。
有名なのは、from dual を書かなくても良くなったこと。ですが、有名すぎるのであえて書きません!w

ということで、ちょっとマイナーだけど便利ですよね! という 「GROUP BY列の別名または位置の指定が可能に! / 23ai〜」 というお話。

参考 ー Oracle Databaseリリース23cの変更点
https://docs.oracle.com/cd/F82042_01/sqlrf/Changes-in-This-Release-for-Oracle-Database-SQL-Language-Reference.html

自分用アップデートメモでもありますw

まずこれまでのおさらいということで、Oracle Database 21c EEで挙動を確認しておきます。

SCOTT@orclpdb1> select banner_full from v$version;

BANNER_FULL
-----------------------------------------------------------------------
Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production
Version 21.3.0.0.0


SCOTT@orclpdb1> select * from emp;

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
7369 SMITH CLERK 7902 17-DEC-80 800 20
7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30
7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30
7566 JONES MANAGER 7839 02-APR-81 2975 20
7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30
7698 BLAKE MANAGER 7839 01-MAY-81 2850 30
7782 CLARK MANAGER 7839 09-JUN-81 2450 10
7788 SCOTT ANALYST 7566 19-APR-87 3000 20
7839 KING PRESIDENT 17-NOV-81 5000 10
7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30
7876 ADAMS CLERK 7788 23-MAY-87 1100 20
7900 JAMES CLERK 7698 03-DEC-81 950 30
7902 FORD ANALYST 7566 03-DEC-81 3000 20
7934 MILLER CLERK 7782 23-JAN-82 1300 10

14 rows selected.

続きを読む "GROUP BY列の別名または位置の指定が可能に! / 23ai〜 / SQL / FAQ"

| | | コメント (0)

2024年5月 9日 (木)

VirtualBox TestBuild for macOS/ARM64における現時点でのOracle Database 21cの起動、停止時間の記録 #2 / 7.0.97r163068 ( 2024-5-07T20:38:44Z )

2025-05-03にTestBuildが更新されていたわけですが、なんと、2024-5-07T20:38:44Zに更新されていました。(テストビルドって、月に何回更新されてるのだろう?...)

Oracle Database 23ai Free Developer、Oracle Database 21c EE 、MySQL 8.0.36 そして PostgreSQL 13.14
は問題なく起動(最近安定して起動するのでログは省略)。

ということで、Oracle Database 21cの起動、停止時間の記録だけメモしておきます。

起動停止時間は大きく変わってないように思います(ブレはある程度あるにしても)が、若干速くなってる気もしますね。特に、M1で。次のアップデートが楽しみですね。

続きを読む "VirtualBox TestBuild for macOS/ARM64における現時点でのOracle Database 21cの起動、停止時間の記録 #2 / 7.0.97r163068 ( 2024-5-07T20:38:44Z )"

| | | コメント (0)

2024年5月 7日 (火)

VirtualBox TestBuild for macOS/ARM64における現時点でのOracle Database 21cの起動、停止時間の記録 / 7.0.97r162957(2024/4/26) / 7.0.97r163029(2024/5/3)

さて、ここのところVirtualBoxの話題が多いですが、安定して起動するようになったVirtualBox TestBuild for macOS/ARM64。気になるのも当然です。Intel Macいつ捨てるんだよって話もあるわけでw

 

という個人的な都合は置いておいてw

 

以下にも記載されているように、現状は、性能面含めた問題があることもあり、Intel版macのVirtualBoxと完全にお別れすることもできない状況ではあります。
https://www.virtualbox.org/wiki/Testbuilds “The test builds for macOS/ARM64 work in principle on Macs with M1, M2 or M3 CPU. However, they are developer previews with known issues (including serious performance ones) with all recent guest operating systems.”

 

ただ、最近のTestBuildでは安定して起動するようにところまで改善してきておりいつ正式リリースだろう。。。と気になってしょうがない状況ではありますwww

 

と、いうことで、
現時点のApple Silicon版VirtualBoxで安定して起動するようになったOracle Database 21c EEの起動停止速度をざっくり確認しておこうと思います。
(今後のVirtualBoxのリリースで、どう改善したのか確認するネタとしても大切なので)

 

起動提示時間の確認方法は、それぞれのmacで、同じ方法で行いました。

 

前提 同じVMをそれぞれインポートして実施
1. VirtualBoxのVMを起動(Oracleは自動起動にしていない)
2. LSNRCTL for Linuxの起動
3. Oracle Database 21cの起動
4. Oracle Database 21cの停止
5. Oracle Database 21cの起動
6. Oracle Database 21cの停止

 

を行い、どの程度の時間で起動停止できるのかメモっておいた。Apple SiliconのVirtualBoxもIntel版レベルに近づいて欲しいところではある。。。が現時点では桁が違いますね。。。

 

ただ、7.0.97r162957(2024/4/26)版のTestBuildと7.0.97r163029(2024/5/3)版のTestBuildだと、若干、7.0.97r163029(2024/5/3)版の方が速くなって気はしますよね。。。。若干ですが。

続きを読む "VirtualBox TestBuild for macOS/ARM64における現時点でのOracle Database 21cの起動、停止時間の記録 / 7.0.97r162957(2024/4/26) / 7.0.97r163029(2024/5/3)"

| | | コメント (0)

2024年5月 4日 (土)

DTM / 4月に公開した曲

毎月のルーティーンw

 

4月に公開したループ一覧
4月に公開したループってシン仮面ライダーを見てなんとなく作ったやつなので、その影響を受けておりますw

 

 

Shin Grasshopper Loops Ver.2.3 / N + 1 Loops

シン仮面ライダーのトレイラーの音声をオフにしてこちらを再生してみると面白い?かもw

このループのオリジナルver.1は以下、映画見た後になんとなく作っただけで放置してたわけですが、Ver2.3との差に気づいていただければ幸いですw

 

こちらが元ネタw 2023/03/30公開
Grasshopper Loops Ver.2.3 / N + 1 Loops

 

 

Ver. 2.3を作った勢いに乗って、Voxトラックを適当に載せた、MAD MIX版も作ってみた。
Shin Grasshopper Loops Ver.2.3 (MAD MIX Ver.2) / N + 1 Loops - GarageBand Edit -

 

Enjoy! GarageBand / Apple Loops. :)

 

| | | コメント (0)

MySQL 8.0.36 , PostgreSQL 13.14, Oracle Database 21c, Oracle Database 23ai on VirtualBox for Apple Silicon Test Build 7.0.97_BETA r162957

Oracle Database 23c 改め、23ai となったのと、4/26日版 VirtualBox Test builds Development snapshotsがリリースされていた(だが、5/3版がすでに公開されていたw)
https://www.virtualbox.org/wiki/Testbuilds


20240503-95842


20240503-85117

M2 MBAでの確認情報だけで、M1はどうよ?とこともあるので、今回は、M1側で検証してみた。(本当はこちらでバシバシ使いたいわけですけども、まだまだ遅いので確認だけw)

*** mac info. ***
ProductName: macOS
ProductVersion: 14.4.1
BuildVersion: 23E224

*** maxOS ver. ***
Model Name: Mac Studio
Chip: Apple M1 Ultra
Total Number of Cores: 20 (16 performance and 4 efficiency)
Memory: 64 GB

*** VirtualBox ver. ***
7.0.97r162957
(VirtualBox 4/26 Test-Builds Developer Snapshot)


公開されたばかりの、Oracle Database 23ai Free DeveloperのVirtualBox pre-Build VMでの確認。
https://www.oracle.com/database/technologies/databaseappdev-vm.html

続きを読む "MySQL 8.0.36 , PostgreSQL 13.14, Oracle Database 21c, Oracle Database 23ai on VirtualBox for Apple Silicon Test Build 7.0.97_BETA r162957"

| | | コメント (0)

2024年4月 3日 (水)

DTM / 3月に公開した曲

さて月一のルーティーンになってますが、先月公開した曲リストです。

 

ここのところ公開済みの曲のメジャーやマイナーバージョンアップが多いですが、変えたいな〜と思ったタスクをこなしていく、アジャイルDTMな感じでやっているので、次にやることを決めて、次のスプリントでやっつける。ということで頻繁にマイナーアップデートしたりしています。最近んは旧バージョンを限定公開に変更していないのでw、ひとつ前のどうだっけ?というチェックもできるようにしてあります:)

 

Funk N + 1 Loops ver.2 / N + 1 Loops
先々月に公開した曲のメジャーバージョンアップ



 

Autumn Loops 2024 / N + 1 Loops
これはGarageBandいい感じに進化したねー。と遊び始めた2022年になんとなくファンキーな感じで!と作った曲のメジャーバージョンアップです。あえて、Ver.2にせず、2024にしてみたw。



 

O(N) Loops ver. 1.3 / N + 1 Loops
昨年なんとなくループを置いていたらできてしまった曲ですが、久々に見た4 Produces 1 SampleでSo glitchy!って単語が飛び交ってるたので、glitchy!でこの曲みたいなタイプだよなー。と思い出してマイナーバージョンアップw



 

最後に、ここ半年ぐらいのまとめ的なやつ。今年後半にもまとめる予定ではありますが:)

 

N + 1 Loops 2024 Best GarageBand DTMs / N + 1 Loops

 

以下のループをまとめています
00:00 - Funk N + 1 Loops Ver.2
01:59 - Autumn Loops 2024
03:59 - Funky Groovy Loops Ver.1.1
05:58 - Moire Loops Dub version Ver. 1.1
07:57 - XYZ Loops Ver.2
10:07 - 80's Loops Ver.2
12:03 - Sunny Rain Loops Ver.3 - "Dub Version of Sunset Loops"
14:07 - Fireworks Loops
16:07 - A Fine Autumn Day Loops Ver. 2
18:10 - Loops in Clouds Ver.3
20:05 - Rain Loops
22:04 - City Lights Loops
24:06 - Memory Loops - Ver. 1.1
26:06 - Heartbeats Loops
28:05 - 他力本願 Loops
30:07 - O(N) Loops Ver. 1.3

では、また。

| | | コメント (0)

2024年3月25日 (月)

Oracleのマニュアルで Bushy Join Tree と説明されてる図、Zigzag Join Treeだよね?、いわゆる、Bushy Join Tree は無いのか? いいえ、あります!

久々の技術ネタの投稿です。
昨年末のエントリーに軽くスルーしていた面白いネタが隠れていたのですが、気付いた方はどれぐいたでしょうか? 多分、ぼぼ居ないだろうとは思いますがw

ということで、本日のお題は、軽くスルーしていた面白いネタとして、

Oracleでも、一般的に Bushy Join って言われているJoin Treeを生成することもできるのだ!

。。。というお話をしたいと思います。

 

Oracleのマニュアル( SQL Tuning Guide / Join - Oracle Database 23c )では、一応、Bushy Join Tree という記述をされているのですが、実際には、Zigzag Join Tree なんですよね。結合ツリーの図も実際の実行計画も。

一方、PostgreSQLでは、見間違えようながない Bushy Join Tree が生成されているのがわかります。
帰ってきた! 標準はあるにはあるが癖の多いSQL #6 - Hash Joinの結合ツリーにも癖がでる

Oracleさんのマニュアルのリンク貼っても、リンク切れしちゃうので、いずれリンク切れしちゃう想定でマニュアルの図を手書きでw (といっても、 Pagesで書いたのですが)を貼っておきますね。
なお、本エントリーの後半に参考になりそうなリンクを貼っておきました。(Oracleさんのマニュアルリンクよりはリンク切れし難いと信じてw)

 


20231208195525
20231208195537

 

 

続きを読む "Oracleのマニュアルで Bushy Join Tree と説明されてる図、Zigzag Join Treeだよね?、いわゆる、Bushy Join Tree は無いのか? いいえ、あります!"

| | | コメント (0)

2024年3月 7日 (木)

DTM / 2月に公開した曲

さてさて、毎年の義務的な事務作業が終わり落ち着いたのでw

2月に公開したDTM

Funk N + 1 Loops / N + 1 Loops

実は、ver.2を作っているのだけどw アジャイルDTMなのでw


| | | コメント (0)

2024年2月21日 (水)

Top N Queryの弱点と対策

久々にSQLチューニングネタです。しかも、真面目な感じのタイトルw

11年前に、rownum使って満足しちゃってると.....おまけのおまけ FETCH FIRST N ROWS ONLY編 という、rownumや、fetch first N rows only でTOP N rows を取得する際に、忘れがちな問題として、TOP N rowsの行数未満(空振りを含む)の場合、全行読み込んでしまうので、絞り込みしにくいような検索で、rownumやfetch first N rowsで全表走査を回避したつもりになっていると、痛い目にあうよ!

というネタを書いていました。

この大切な癖、忘れちゃってませんか? 大変なことになりますよ。。ということで、再びこのネタを書くことにしました。

Oracle Database 21cを使っていますが11年も昔から変わったところはないので、塩漬けしている古〜いオラクルでも楽しめる内容にしてありますw

 

まず、今日の準備から

SCOTT@orclpdb1> @fullscanfulness

表が削除されました。

経過: 00:00:01.31
1 create table fullscanfulness
2 (
3 id number not null
4 ,dummy_text varchar2(4000)
5 ,hoge_flg number(1) not null
6 ,constraint pk_fullscanfulness primary key(id)
7* )

表が作成されました。

経過: 00:00:00.29
1 begin
2 for i in 1..100000 loop
3 insert into fullscanfulness values(i,lpad('*',3500,'*'),0);
4 if mod(i,100)=0 then commit; end if;
5 end loop;
6* end;

PL/SQLプロシージャが正常に完了しました。

経過: 00:00:22.45
1* insert into fullscanfulness values(100001,lpad('*',3500,'*'),1)

1行が作成されました。

経過: 00:00:00.01

コミットが完了しました。

経過: 00:00:00.01

PL/SQLプロシージャが正常に完了しました。

経過: 00:00:03.53
1* select count(1) from fullscanfulness

COUNT(1)
----------
100001

経過: 00:00:00.01

SEGMENT_NAME BLOCKS
------------------------------ ----------
FULLSCANFULNESS 51200
PK_FULLSCANFULNESS 256

経過: 00:00:00.19

 

と、クセのありそうな、なんとなく、見る機会の多そうなフラグ列のある表に主キーだけがある状態です。
なお、最後のデータ id=100001だけフラグ列が 1 になっています。最後の行なので、物理的にも最後尾にしてあります(意図的に)

 

フラグ=1になっている行が表どの位置にあるかイメージ図で書くと以下のような感じ

20240221-200436

 

続きを読む "Top N Queryの弱点と対策"

| | | コメント (0)