« 对Hash Cluster表的一些进一步测试之二 »
Oracle » http://www.anysql.net/oracle/hash_cluster_table_test02.html 2007-04-28今天早上用真实的数据进行了第二次测试, 一是验证我这种定义SIZE和HASHKEYS参数的方法有没有问题, 另外一个是难证Oracle自带的Hash函数是否高效. 为此我选取了1000万条真实的记录, 表的大小大约是1.5个G, 我将Cluster的HASHKEYS * SIZE设成2G左右, 语句如下:
CREATE CLUSTER C_USER_HOST_ID_LOOKUP (USER_ID NUMBER(38,0))
SIZE 8192 SINGLE TABLE HASHKEYS 262144;
用sqlldr装载这些数据却用了1个小时, 这是因为你不能用Direct方式, 而且每条记录是随机存放的, 而不是连续存放的, 所以比较慢. 装载完成后, 用如下脚本进行验证. 其中的SELECT语句可是要执行大约1000万次的.
DECLARE
TEMP VARCHAR2(64);
BEGIN
FOR REC IN (SELECT USER_ID FROM CR_FLOUTEST) LOOP
SELECT /* FLOU_TEST */ userid INTO TEMP FROM CR_FLOUTEST
WHERE USER_ID = REC.USER_ID;
END LOOP;
END;
/
最后在V$SQL中检查这个SELECT语句的执行情况, 发现是相当的高效的. 表明我选择的SIZE和HASHKEYS参数没有问题, 也表明Oracle的Hash算法很好.
SQL> SELECT HASH_VALUE, BUFFER_GETS, EXECUTIONS
2 FROM V$SQL WHERE HASH_VALUE=2716314996;
HASH_VALUE BUFFER_GETS EXECUTIONS
---------- ----------- ----------
2716314996 9998912 9998777
在做完这些验试后, 将决定是不是要将有二亿条记录的表搞成Hash Cluster.


这个咚咚的参数这么难设置,是否在固定大小的表中使用比较合适呢?能否举几个合适的使用场景呢?谢谢
最后2亿的表搞成hash cluster了?dml操作不知道咋样
后来发现truncate, drop等操作上不能快速完成, 没有做.
哦,ddl原来也受影响啊,不过2亿的表需要drop truncate快速完成吗.感觉这东西是只能用于静态数据查询啊.