Search

OakieTags

Who's online

There are currently 0 users and 38 guests online.

Recent comments

Affiliations

外部表 in SSD

TPC-Hの環境をKingstonのお買い得SSD4本で構築したRAID-0に構築した。
以前のCrystalDiskMarkの結果は以下のとおりだった(SATA直結のRAID-0、exFAT 512K):
比較対象としたのは、Western Digital社のWD6000HLHX。SATAIII 6Gb/秒で接続可能な10,000 RPMハードドライブ
CrystalDiskMarkの結果は以下のとおりだった:
150万件のORDERSを外部表として使う:


SQL> desc orders
名前 NULL? 型
----------------------------------------- -------- ----------------------------
O_ORDERDATE DATE
O_ORDERKEY NOT NULL NUMBER
O_CUSTKEY NOT NULL NUMBER
O_ORDERPRIORITY CHAR(15)
O_SHIPPRIORITY NUMBER
O_CLERK CHAR(15)
O_ORDERSTATUS CHAR(1)
O_TOTALPRICE NUMBER
O_COMMENT VARCHAR2(79)


SQL> select count(*) from orders;

COUNT(*)
----------
1500000


Parallel度は4でテストを行った:
SQL> alter session force parallel query parallel 4;

テストSQL:
SQL> select * from orders where O_COMMENT like '%abcde%';

内部表 外部表
SSD 0.82秒 2.15秒
HDD 3.08秒 2.74秒

テストは、外部表を作成後マシンのリブートを行い、すべてのキャッシュをクリア後の1回目の結果を取った。

結果Full Scanに於いて、
SSDの内部表、通常のテーブル、が圧倒的に速い。
HDD上では内部も外部も速度は変わらない。
SSDの外部表がHDDの内部表よりも速い。

150万件のORDERテーブルでもdirect path readでScanすると「いずれにせよ高速」だということが分かる。

外部表作成SQLとテストSQLの実行計画:


SQL> CREATE TABLE orders_xt
2 ORGANIZATION EXTERNAL
3 (
4 TYPE ORACLE_DATAPUMP
5 DEFAULT DIRECTORY UNLOADER_DATA
6 LOCATION ( 'orders_xt.dmp' )
7 )
8 AS
9 SELECT *
10 FROM orders;
 
内部表
--------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | TQ |IN-OUT| PQ Distrib |
--------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 75000 | 8203K| 568 (2)| 00:00:07| | | |
| 1 | PX COORDINATOR | | | | | | | | |
| 2 | PX SEND QC (RANDOM)| :TQ10000 | 75000 | 8203K| 568 (2)| 00:00:07| Q1,00 | P->S | QC (RAND) |
| 3 | PX BLOCK ITERATOR | | 75000 | 8203K| 568 (2)| 00:00:07| Q1,00 | PCWC | |
|* 4 | TABLE ACCESS FULL| ORDERS | 75000 | 8203K| 568 (2)| 00:00:07| Q1,00 | PCWP | |
--------------------------------------------------------------------------------------------------------------
 

外部表
------------------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | TQ |IN-OUT| PQ Distrib |
------------------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 20 | 2780 | 3 (0)| 00:00:01 | | | |
| 1 | PX COORDINATOR | | | | | | | | |
| 2 | PX SEND QC (RANDOM) | :TQ10000 | 20 | 2780 | 3 (0)| 00:00:01 | Q1,00 | P->S | QC (RAND) |
| 3 | PX BLOCK ITERATOR | | 20 | 2780 | 3 (0)| 00:00:01 | Q1,00 | PCWC | |
|* 4 | EXTERNAL TABLE ACCESS FULL| ORDERS_XT | 20 | 2780 | 3 (0)| 00:00:01 | Q1,00 | PCWP | |
------------------------------------------------------------------------------------------------------------------------

最後に、
TPC-HのORDERSを外部表とするのはリアリティがある。
CSVで定期的に注文情報が更新されそのままDWHに反映されるシステムはスマートだ。