4.了解查询优化器(Query Optimizer)的改变
IQ 15中很多操作都采用并行处理,这意味着为了执行某一特定任务需要分配更多的线程。更多的线程需要更多的内存,这里所说的内存不只是IQ Main Cache和Temp Cache,而且还有操作系统内存。
IQ 15可以使用多个服务器和数据库选项设置内存分配和并行度以匹配机器的硬件资源(CPUs和内存)。除了-iqmt和-iqtc能够在IQ Server启动时设置Main Cache和Temp Cache的尺寸,其他控制并行度的数据库选项如下:
(1) max_query_parallelism
这个数据库选项用来控制查询优化器对查询操作符(比如:joins、group by、order by等),所允许的最大并行度上限值,这个选项应该大于等于机器的CPU Cores数。
(2) max_iq_threads_per_team
这个数据库选项控制IQ为执行某一操作而分配的线程数量。这个选项应该至少是机器CPU Cores的2倍。
(3) max_iq_threads_per_connection
这个数据库数据库选项用于控制一个连接所允许的最大线程数量。这个选项应该大max_iq_threads_per_team选项的值。
4.1 IQ数据库选项和查询优化器
(1)通常情况下,只是为了分析目的才打开“QUERY_PLAN”数据库选项以收集查询计划。如果保持打开这个选项,那么.iqmsg文件的尺寸将会快速增长。
(2)确保“FORCE_NO_SCROLL_CURSORS”数据库选项是打开的(ON)。只是在你必须使用可滚动游标(向前)时才把这个选项设为OFF。
(3)当装载数据时(load table、select into、insert select、insert location等),把数据库选项“APPEND_LOAD”设置为ON能够提高性能。如果这个选项设为OFF,那么IQ将会填充表中被删除记录留下的空间;如果设为ON,那么新记录不会填充被删除记录留下的空间,而是在表的末尾使用新的数据页存放数据。此外,当APPEND_LOAD设置为OFF时,由于填充被删除记录留下的空间会修改已存在的数据页,这会导致更多的版本空间占用(snaphot versioning,类似与oracle的undo,解决读写并发不相互阻塞的技术)。删除操作而留下的空行当存储到磁盘上时会进行压缩,基本不会浪费磁盘空间,但是当这些被压缩的数据读取到IQ Main Cache中时就会浪费内存空间。
(4)当执行INSERT LOCATION语句时,如果数据量比较大,可以把网络通讯包设置到4K,以优化网络通讯的性能(在大多数平台上,缺省时512字节)。下面是一个例子:
insert into test2 location 'myase.testdb' packetsize 4096 {select * from table1}
需要注意的是远程ASE(sp_configure default package size/max package size)或IQ Server(-p server option)需要支持INSERT LOCATION语句中指定的PACKETSIZE值。
(5)一般来说需要把“MINIMIZE_STORAGE”数据库选项设置为ON,这可以让IQ创建优化的FP(1)、FP(2)、FP(3)索引。这些优化的FP索引可以占用更少的空间、降低I/O、改进查询性能。
4.2 查询优化器改变小结
IQ 15.x提供了很多控制优化器的设置参数/选项能够帮助你改进查询性能。对于上面提及到的选项,可以进一步参考IQ参考手册。
在改变这些参数之前需要了解这些参数的作用,如果在server级改变这些参数的设置可能会对其它查询造成负面影响。建议把这些参数设置为临时针对特定的查询的设置,而不要设置为全局的。
4.3 查询引擎额外的一些改变
(1)增加了FP(3) 优化的FP索引类型
A. IQ 15之前IQ支持FP(1)和FP(2)两种类型的优化FP索引,从IQ 15开始支持3字节的FP索引,最大的lookup table尺寸是16777216,在lookup table中每一个lookup key需要3字节存储。
B. 需要注意的是:lookup table使用的存储空间小于FP_LOOKUP_SIZE数据库选项设置的值,并且小于由FP_LOOKUP_SIZE_PPM数据库选项设定的Main Cache部分的值时才能创建FP(3)索引。
C. FP(3)索引能够提升特别大的表上高基数字段的查询性能。
(2)多字段组合HG索引
A. 多字段组合索引能够用于ORDER BY 操作,消除排序操作
B. IQ 15可以允许比较复杂的表达式利用索引,使用索引进行处理,例如下面的查询:
SELECT COUNT(*)
FROM table1
WHERE col1 = 10 and col2 = 50 and col3 = ‘ABC’
创建如下多字段组合HG索引可以提高查询速度:
Create HG index Indexname_HG on table1(col1, col2, col3)
(3)空间用尽时事物行为的改变
IQ 15改变了Main Store和Temp Store空间满时事物处理的行为:
A.IQ 15之前的版本,会挂起事物
B.IQ 15开始会终止并回顾事物,而不再挂起事物。
阅读(4663) | 评论(0) | 转发(0) |