对Hash Cluster表的一些进一步测试之一

    在前面的例子中, 我们都只是做了一些小批量数据, 如果我的Hash Cluster表有几个GB或几十个GB的大小时, 又怎么样呢? 下面进行的是我在笔记本上的测试, 用于测试的表的大小是100MB, 进行测试时的数据是50万条. 测试的目的是为了要证明Hash Cluster是否可能用于大数据量的表中, 即验证Oracle内建的Hash函数是否是高效的. 创建Hash Cluster的句语是:

CREATE CLUSTER C_T_OBJECTS (OBJECT_ID NUMBER(38,0))
SIZE 8192 SINGLE TABLE HASHKEYS 12800;    

    在100MB的DB_CACHE_SIZE下进行测试:

21:48:10 SQL> SELECT HASH_VALUE, BUFFER_GETS, EXECUTIONS
21:48:54   2  FROM V$SQL WHERE HASH_VALUE=3523526785;

HASH_VALUE BUFFER_GETS EXECUTIONS
---------- ----------- ----------
3523526785      540786     540696

    在50MB的DB_CACHE_SIZE下进行测试, 可以看出DB_CACHE_SIZE的大小不是很关键:

21:51:37 SQL> SELECT HASH_VALUE, BUFFER_GETS, EXECUTIONS
21:51:44   2  FROM V$SQL WHERE HASH_VALUE=3523526785;

HASH_VALUE BUFFER_GETS EXECUTIONS
---------- ----------- ----------
3523526785      540790     540696

    当另外一个会话在进行数据装载时, Cost将会增加, 这是因为Consistent Gets引起的, 从平均值来说仍是十分高效的.

22:03:19 SQL> SELECT HASH_VALUE, BUFFER_GETS, EXECUTIONS
22:03:35   2  FROM V$SQL WHERE HASH_VALUE=3523526785;

HASH_VALUE BUFFER_GETS EXECUTIONS
---------- ----------- ----------
3523526785      740454     540696

    明天将在比较好的机器上, 测试10G大小左右的真实数据. 另外一个问题是如何去验证是否存在比较严重的数据分布(算出来的Hash值)不均匀的问题?

留言 (3)

在我们的 Production环境, 10.1.0.4 RAC,

一张表, 7百万行, 主键Hash, 平均列长 12 bytes,
一共两个列.
每小时访问30万次.

跑了2年了, 平均速度比我来之前提高了50倍,而且CPU使用率剧烈下降, 清爽.

两个字段, 是正式表? 不是你自已做的一个Hash Index?
我现在已经找到如何定义SIZE和HASHKEYS的方法了.

是运营系统里面的表, 分别是 book_id , book_qty, 以后可能会加上book_price.
是库存系统和订单系统的接口, 每次卖出一本书,quantity减一.
这样的设计可以避免blocking
(order update blocking inventory batch data loading).
以后在我的博客里面介绍.

讲讲你的 如何定义SIZE和HASHKEYS 的 原理,
等你下文书分解.

发表留言:

« Previous | Main | Next »

英语900句 | English 900

  • Go straight ahead and turn left at the second crossing.
  • 一直往前走, 在第二个十字路口往左拐.
  • Excuse me. Can you tell me how to get to Mr. Hu's restaurant?
  • 对不起, 你能告诉我怎么去胡先生的餐馆吗?
  • Go on for about 100 meters. It's on your left side. You can't miss it.
  • 往前走约100米, 在你左手边, 你不会错过的.
  • Which one is Mr. Jame's office?
  • 哪间是詹姆司先生的办公室?
  • It's Room 201 on the second floor.
  • 二楼201房间.