资源描述
Page Page 1 1Global TechnologyGlobal TechnologySybase IQ性能调优王兵王兵1860112162818601121628wangbglobal-北京寰信通科技有限公司Beijing Global Technology Co. Ltd.2021年年10月月28日日Page Page 2 2Global TechnologyGlobal TechnologyIQ性能调优的主要内容性能调优的基本理论设计和查询(SQL)优化数据库服务器/数据库调优Page Page 3 3Global TechnologyGlobal TechnologySybase IQ性能调优(Server和数据调优)王兵王兵wangbglobal-北京寰信通科技有限公司Beijing Global Technology Co. Ltd.2021年年10月月28日日Page Page 4 4Global TechnologyGlobal Technology主要内容性能监控概述监控工具和统计信息Cache调优CPU/Threads调优调整影响查询的数据库选项Page Page 5 5Global TechnologyGlobal Technology性能监控为什么要进行监控v当系统出现异常(例如:应用缓慢、不能连接等)现象,系统管理员需要诊断和解决问题v主动发现系统陷在异常,提前解决监控什么v操作系统层面:CPU、内存、I/Ov数据库层面: 数据库运行情况、统计信息、可疑的SQLs怎么监控v使用IQ提供的系统存储过程(数据库运行情况)v使用IQ统计信息监控命令(统计信息)Page Page 6 6Global TechnologyGlobal Technology监控工具和统计信息IQ提供的系统存储过程、系统表和相关函数v查看IQ总体情况v查看用户连接和用户活动v查看IQ存储空间v查看对象存储IQ UTILITIESsp_iqsysmonPage Page 7 7Global TechnologyGlobal Technology监控工具和统计信息 查看IQ的总体情况v sp_iqstatus 包括显示当前数据库的多种状态信息,包括:page size、dbspaces数量和使用情况、block的使用情况、buffer的使用情况、verfsion空间情况、I/O情况、backup信息等等。v 查看IQ数据库版本 select version(与ASE相同)v 查看字符集 SELECT db_property( charset )v 查看create database指定的选项 select * from sysinfov 查看server启动时的命令行 select property(CommandLine)v 查看IQ Server Name select property(Name) v 查看server启动时间 select property(StartTime)v 查看IQ当前使用的Server Log File select property(ConsoleLogFile)Page Page 8 8Global TechnologyGlobal Technology监控工具和统计信息用户连接和活动vsp_iqwho /显示所有当前连接到IQ的用户或连接信息。vsp_iqconnection /显示连接信息vsp_iqcontext或sa_conn_activity /显示连接当前执行的语句(如果语句执行完可能看不到)v查看连接使用的协议/程序接口select connection_property(ClientLibrary,connid)v使用sp_iqtransaction查看事物信息v使用sp_iqlocks查看锁信息v使用sp_iqshowpsexe查看连接中用于控制任务优先级和资源使用的数据库选项设置Page Page 9 9Global TechnologyGlobal Technology监控工具和统计信息查看IQ存储空间vsp_iqstatusselect * from sp_iqstatus() where name like %Blocks Used%select * from sp_iqstatus() where name like %Versions%vsp_iqdbspace /显示每一个dbspace的详细信息vsp_iqdbspaceinfo /显示每一个dbspaces上有哪些对象查看对象存储vsp_iqtablevsp_iqindexsizev估算表的尺寸sp_iqestspace customer,1000000,131072 /表名、记录数、IQ PAGE SIZEPage Page 1010Global TechnologyGlobal Technology监控工具和统计信息如何找到有问题的/需要调优的SQLs?v使用PDBA,抓取SQL,找到执行时间长、次数多的SQLv使用IQ提供的SQL Trace功能生成SQL文件,然后使用下面的工具可以得到执行之间最长的SQL打开SQL Trace(注意trace文件需要占用文件系统空间!) call sa_server_option(request_level_logging, SQL); call sa_server_option(request_level_log_file,sqltrace.log); 按执行时间从长到短的顺序查看sql perl tracetime.pl sqltrace.log format=fixed | sort -n -r /tracetime.pl文件在$ASDIR/samples/asa/performancetracetime目录下关闭SQL Trace(注意trace文件需要占用文件系统空间!) call sa_server_option(request_level_log_file,); call sa_server_option(request_level_logging,NONE);Page Page 1111Global TechnologyGlobal Technology监控工具和统计信息找到之后做什么?v查看SQL中表的定义和索引 select tablewidth(customer) -查看表的行宽 select count(*) from tablename sp_iqcolumn tablename -查看表中字段的数据类型 sp_iqpkeys tablename -查看表的主键信息 sp_iqindex tablename -查看表的主键信息 sp_iqindexmetadata indexname -查看指定索引信息,对于FP索引能够看到是否为优化的FP索引sp_iqrowdensity tablename -查看FP索引信息sp_iqtablesize tablename -查看表的占用的存储空间大小Page Page 1212Global TechnologyGlobal Technology监控工具和统计信息 找到之后做什么?v 获得执行计划beginset temporary option QUERY_NAME= yourqueryname;set temporary option QUERY_PLAN=ON;set temporary option QUERY_DETAIL=ON;set temporary option QUERY_TIMING=ON;set temporary option INDEX_ADVISOR=ON;set temporary option QUERY_PLAN_AFTER_RUN=ON;set temporary option QUERY_PLAN_AS_HTML=ON;set temporary option QUERY_PLAN_AS_HTML_DIRECTORY=./;-下面SQL查询语句select a.service_key,sum(local_call_count) call_count,sum(local_call_minutes) call_minutesfrom telco_facts a join residential_customer b on a.customer_key = b.customer_keywhere b.state = MOgroup by a.service_key endPage Page 1313Global TechnologyGlobal TechnologySQL调优找到之后做什么?v分析查询计划,然后采取行动,并进行测试增加索引设置数据库选项控制查询优化器行为/使用hints改写SQL进行测试Page Page 1414Global TechnologyGlobal Technology监控工具和统计信息IQ Utilities (所有IQ版本)v通过使用IQ utilities 命令启动/停止监控v监控结果写到server端的文件中v 一个数据库连接上只能有一个main 监控文件和temp监控文件v连接退出,监控停止sp_iqsysmon (要求IQ 12.7及以上版本)v类似于ASE的sp_sysmon,通过存储过程方式启动/停止监控v监控结果可以返回到SQL client或写入文件中v比IQ utilities 命令具有跟多能力v支持“批”和“文件”两种模式Page Page 1515Global TechnologyGlobal TechnologyIQ Utilities使用IQ UTILITIES,比较常用有:v-summary-interval 建议为30s或60sIQ UTILITIES MAIN INTO monitor START MONITOR -summary -append -file_suffix summary-iqmon -interval 30;IQ UTILITIES PRIVATE INTO monitor START MONITOR -summary -append -file_suffix summary-iqmon -interval 60;v-cacheIQ UTILITIES MAIN INTO monitor START MONITOR -cache -append -file_suffix cache-iqmon -interval 30;IQ UTILITIES PRIVATE INTO monitor START MONITOR -cache -append -file_suffix cache-iqmon -interval 30Page Page 1616Global TechnologyGlobal Technologysp_iqsysmonsp_iqsysmon按节(sections)输出信息,你可以指定输出“一节”或“多节”信息v一般来说,一个section描述了IQ Server的一个组件的统计信息Buffer manager、Thread management等v收集和报告指定sections的统计/计数器信息vSection由头信息标识有一些sections是cache(Main/Temp)相关的v缺省 main 和 Temp的信息都被显示v能够指定m 或 t前缀以限制某一个cache的信息输出. 例如:sp_iqsysmon start_monitor mbufman tbufpoolPage Page 1717Global TechnologyGlobal Technologysp_iqsysmonsp_iqsysmon有如下sectionsComponentComponentNameNameBuffer Manager(m/t)bufmanBuffer Pool(m/t)bufpoolPrefetch management(m/t)prefetchFree list management(m/t)freelistBuffer allocation(m/t)bufallocMemory ManagementmemoryThread managementthreadsCPU utilizationcpuTransaction managementtxnServer context statisticsserverCatalog statisticscatalogPage Page 1818Global TechnologyGlobal Technologysp_iqsysmon使用例子vsp_iqsysmon 00:05:00vsp_iqsysmon 00:00:30,mbufman tbufmanvselect Stat as StatName,f1 as StatValue from sp_iqsysmon(00:00:10,mbufman mbufpool ) where Stat in (Finds,Hit%,Reads,Writes,GrabbedDirty,BusyWaits,Pinned,Dirty,InUse)Page Page 1919Global TechnologyGlobal Technologysp_iqsysmon Buffer Manager(bufman/mbufman/tbufman)节v 报告IQ Buffer Manager组件的统计信息v 用于问题分析的一些重要信息 Physical IO volume Reads/Writes: 物理物理“读读/写写”操作的次数操作的次数 PReadBlks/PWriteBlks:物理读:物理读/写的块数写的块数 PReadKB/PWriteKB:物理读:物理读/写以写以KB为单位的量为单位的量 Cache操作相关信息 Finds:buffer cache被请求的次数被请求的次数. 如果如果Finds的值突然降到并保持为的值突然降到并保持为0,那么,那么Server很可能发生内部很可能发生内部“死锁死锁”. Hits: buffer cache命中的次数命中的次数. Hit%: buffer cache命中率命中率, 是指无须发生物理是指无须发生物理I/O请求,请求,buffer cache就可以满足就可以满足请求的百分比请求的百分比. Creates/Destroys:buffers “创建创建” / “销毁销毁”操作被调用的次数操作被调用的次数 Dirties:buffer被修改的次数被修改的次数 GrabbedDirty: 某一操作为获取某一操作为获取buffers,必须停止以等待这些脏,必须停止以等待这些脏buffers中的数据中的数据写到磁盘上的次数写到磁盘上的次数. Prefetch effectiveness PrefetchReqs 、PrefetchNotInMem 、PrefetchInMem v 按Main Cache和Temp Cache分别输出信息Page Page 2020Global TechnologyGlobal Technologysp_iqsysmonBuffer Manager(bufman/mbufman/tbufman)节v输出信息示例Page Page 2121Global TechnologyGlobal Technologysp_iqsysmonBuffer Pool(bufpool/mbufpool/tbufpool)节v报告IQ Buffer Pool组件的统计信息v用于问题分析的一些重要信息Cache中buffers的移动情况 MovedToMRU:在使用之后被放回:在使用之后被放回MRU端的端的buffers数量数量 MovedToWash:在使用之后被直接放到:在使用之后被直接放到wash区的区的buffers数量数量 RemovedFromLRU:被从:被从MRU-LRU链表中删除的链表中删除的buffers数量数量 RemovedFromwash:被从:被从wash区删除的区删除的buffers数量数量Cache尺寸和buffers使用情况 Pages:cache中的中的buffer/page的数量的数量 InUse: cache中被使用的中被使用的buffer的数量的数量 Dirty: cache中中buffer被修改的次数被修改的次数 Pinned:cache中被使用并且被锁住的中被使用并且被锁住的buffers的数量的数量Page Page 2222Global TechnologyGlobal Technologysp_iqsysmonBuffer Pool(bufpool/mbufpool/tbufpool)节v用于问题分析的一些重要信息Cache刷新和wash区情况 Flushes:flush操作被调用的次数操作被调用的次数 FlushedBufferCount:被刷新到磁盘的:被刷新到磁盘的buffers的数量的数量 Washed:通过:通过wash marker的的buffers的数量的数量 TimesSweepersWoken:没有工作可做的:没有工作可做的sweeper线程被唤醒的次数线程被唤醒的次数 WashTeamSize: # of threads in the sweeper team WashMaxSize:wash区中区中buffers的数量的数量 washNBuffers:通过:通过wash marker的的“干净干净”buffers的数量的数量 washNDirtyBuffers:通过:通过wash marker的的“脏脏”buffers的数量的数量 washSignalThreshold:在:在sweeper线程被唤醒之前能够通过线程被唤醒之前能够通过wash marker的的“脏脏”buffers的数量的数量 washNActiveSweepers:实际正在工作中的:实际正在工作中的sweeper线程数线程数 washIntensity:内部使用的标记:内部使用的标记v按Main Cache和Temp Cache分别输出信息Page Page 2323Global TechnologyGlobal Technologysp_iqsysmon Thread Management(threads)节vThread Management组件的统计信息v用于问题分析的一些重要信息ThrNumOfCpus:CPU数量ThreadLimit:IQ能够使用的最大线程数ThrNumThreads:# of threads actually useableThrReserved:保留的线程数ThrNumFree:当前可以用来被分配的线程数NumThrUsed:当前正在使用的线程数UsedPerActiveCmd:# of threads per commandv是Server级的Page Page 2424Global TechnologyGlobal Technologysp_iqsysmon 在sp_iqsysmon输出上使用查询语句vFields are fixed width to simplify parsingvUse derived table or view over sp_iqsysmon for complex queriesvResults can be selected into table for aggregation 例如:select substr(f1,11,5) as ThreadsUsedPercentfrom sp_iqsysmon(00:00:00, threads)where Stat = NumThrUsed select Stat as StatName,f1 as StatValue from sp_iqsysmon(00:00:10,mbufman mbufpool ) where Stat in (Finds,Hit%,Reads,Writes,GrabbedDirty,BusyWaits,Pinned,Dirty,InUse)Page Page 2525Global TechnologyGlobal TechnologyCache调优 - Query Operations and IQ CachesIQ Main CacheIQ Temp CacheIQ StoreIQ Temp StoreHashesHash Joins (HJ, HPDJ)Group By (Hash)SortsSort Joins (SMJ, SMPDJ)Group By (Sort)Order byNested Loop Joins (NLJ)NLPD JoinsReads from the IQ StorePage Page 2626Global TechnologyGlobal TechnologyCache调优 - 了解 Cache 的使用Main Cache 对于如下的操作是重要的:vVertical group-by(Group-By index)vNLPD JoinsvCorrelated subqueriesvPrefetchTemp Cache 对如下的操作是重要的:vNested Loop Join 的Small side存储将消耗Temp Cache内存vHash Join/Hash Group-byvSorts (join和group by等)Page Page 2727Global TechnologyGlobal TechnologyCache调优- Cache调整的思路隔离问题查询v获得多个查询的执行时间,然后绘制一个条形图是一个好的开始点v焦点是那些对Cache造成较大压力的查询对于问题查询使用工具捕获监控数据v在查询执行的高峰期间捕获监控数据应深入分析,不要盲目、轻率地增加Cache尺寸v应当有理由地增加main cache或temp cachev在一些情况下,增加cache可能会使得查询性能降低Page Page 2828Global TechnologyGlobal TechnologyCache调优- 一个案例焦点是Q10,因为它的执行时间最长隔离问题查询多个查询的执行时间图Page Page 2929Global TechnologyGlobal TechnologyCache调优- 一个案例对问题查询使用sp_iqsysmon获得Cache的统计信息Page Page 3030Global TechnologyGlobal TechnologyCache调优- 一个案例对问题查询Q10使用sp_iqsysmon获得Cache的统计信息Page Page 3131Global TechnologyGlobal TechnologyCache调优- 一个案例对问题查询进行分析(依据“统计信息统计信息”和“查询计划查询计划”)v分析监控统计信息Main cache和Temp cache的Hit rates看上去比较好Temp cache的Hash find 值比较高 Hash find统计值占整个统计值占整个find统计值的比重较大统计值的比重较大(接近接近100%) Finds比物理读代价小,但是也需要开销的!比物理读代价小,但是也需要开销的!Hash已经超过了它的pin quota! 325 hash 页被创建,但是页被创建,但是quota只是只是183Buffer Allocator(Temporary) sectionPage Page 3232Global TechnologyGlobal TechnologyCache调优- 一个案例对问题查询进行分析(依据“统计信息统计信息”和“查询计划查询计划”)v分析查询计划优化器对Hash join的估算不准确Page Page 3333Global TechnologyGlobal TechnologyCache调优- 一个案例调整main cache和temp cache的比例(3:2 Main cache)Page Page 3434Global TechnologyGlobal TechnologyCache调优- 一个案例调整main cache和temp cache的比例(3:2 Temp cache)Page Page 3535Global TechnologyGlobal TechnologyCache调优- 一个案例注意:hash finds值已经从 19.5M减少到9.8M!调整main cache和temp cache的比例(2:3 Temp cache)Page Page 3636Global TechnologyGlobal TechnologyCache调优- 一个案例调整main cache和temp cache的比例(2:3 main cache)Page Page 3737Global TechnologyGlobal TechnologyCache调优- 一个案例采取行动:调整cache的比例v以main/temp cache 3:2比例开始v以相同的负载运行Q10查询,并在执行期间运行sp_iqsysmon收集监控信息v什么时候main cache的比例合适?Excellent find rates(命中率不会由于rebalancing而下降)Vertical group-by or NLPD join not required for performancevWhen is it ok to take away temp cache?Hash Pages创建的数量(看sp_iqsysmon输出的Creates指标)不能超过hash pin quota值(看sp_iqsysmon输出的PinUserQuota指标)Only writes are from large sorts(看temp cache debug输出的Writes/PWriteBlks/PWriteKB指标值,hash 的写不能太高)Max pinned (看sp_iqsysmon输出的Pinned指标)well within cache sizeHash Finds的值与总Finds值的比率不能太高v在调整比例时一次不要太大(不超过10%)Page Page 3838Global TechnologyGlobal TechnologyCache调优 Cache 负载过重Cache繁忙的症状vSweepers写的速度赶不上page dirites的速度v命令执行需要cache buffers,但是没有可用的“干净”buffers,必须等待“脏”buffers中修改的数据写盘下面的统计值可以用来反映Cache是否繁忙vDirty at 100%vHigh GrabbedDirtyvHigh BusyWaits纠正措施vIncrease sweeper % to write out dirty cache asynchronouslyvIncrease wash areaPage Page 3939Global TechnologyGlobal TechnologyCache调优 Cache 负载过重影响Cache Wash区操作繁忙程度的数据库选项vWash_Area_Buffers_PercentSpecifies the size of the wash area as a percent of total buffersDirty buffers in the wash area will be written out asynchronouslyvSweeper_Threads_PercentSpecifies the percent of threads assigned to asynchronously write dirty buffersIncrease if I/O bound commands are causing GrabbedDirtyPage Page 4040Global TechnologyGlobal TechnologyCache调优- 多并发用户分析确定并发用户的高峰值v注意sp_iqsysmon输出中“Buffer Allocator节”的NActiveCommands 统计值 ,这个值可以反映出当前并发活动用户的数量v使用sp_iqcontext可以看到当前活动的SQL语句并发用户多可能会导致资源峰值vGrabbedDirty 统计值增加意味着cache中充满了“脏”buffersv比较高的 NActiveCommands 值,可能会伴随cache有比较大的使用v记住:buffer cache是非常宝贵的资源Page Page 4141Global TechnologyGlobal Technology线程调优 CPU Usage标识CPU密集的操作v有很多排序或hash操作的查询vBitmapped IndexesCorrective ActionsvUse indexes to reduce computation costvRewrite query to gain parallelismPage Page 4242Global TechnologyGlobal Technology线程调优 降低Cache的使用增加索引vIndexes are pre-computed resultsvLess data will be processed horizontally in tempvBetter metadata will reduce sort usage使用“谓词” hintsv能够用于指定谓词和join算法vTry for push-down joins when possible, especially for sort-mergePage Page 4343Global TechnologyGlobal Technology线程调优 限制命令的并行LoadvSet option Max_IQ_Threads_Per_TeamDeletevSet option Max_IQ_Threads_Per_Team to limit delete threadsQueriesvPredicates/Parallel Prepare set option Max_IQ_Threads_Per_TeamvParallel Hash Group-by set option Parallel_GBH_UnitsDBCCvSpecify “resources” percent to limit percent of CPUs usedPage Page 4444Global TechnologyGlobal Technology线程调优 数据库级线程设置iqnumbercpus vIf the operating system reports those hyper-threads as CPUs (reported in the root node in a query plan as “Number of CPUs”), then use the server startup option to tell the server the real number of CPUs in the system.-iqmtvLimits total number of threads-iqtssvLimits stack size for IQ threadsvIncrease only to support queries with deeply nested expressions.vMultiply by #threads to determine memory usagePage Page 4545Global TechnologyGlobal Technology线程调优 连接级线程设置Set option Max_IQ_Threads_Per_ConnectionvMaximum cumulative number of threads that will be allocated to a single connection.vNot strictly enforced for all commandsSet option Max_Threads_Per_Teamv制定了分配给一个并行操作的最大线程数v如果 Max_IQ_Threads_Per_Connection选项修改了,那么这个选项也应该进行调整Page Page 4646Global TechnologyGlobal Technology影响查询的数据库选项Database Options能够影响查询计划Database Options有不同层次的影响ventire queryv session vall users on the serverPage Page 4747Global TechnologyGlobal Technology影响查询的数据库选项下面是一些能够影响用户查询的普通数据库选项vQuery_Temp_Space_Limit default 2000 (MB)Limits use of any Temp resources (cache/disk) to usersSuggest setting to zerozero (0) to allow unlimited usevMinimize_Storage default OffAffects FP indexes created for new tablesWith few exceptions, this option should always be set ONONvForce_No_Scroll_Cursors default OffCauses query results to be buffered to Temp cacheAt most sites option should be changed to permanently ONONPage Page 4848Global TechnologyGlobal Technology影响查询的数据库选项影响join操作的数据库选项v有两个选项可以影响查询优化器分别影响join ordr和join算法缺省情况下,优化器可以做出正确的选择,不需要设置这两个选项You can try to change the behavior using these options, but there is no guarantee the optimizer will complyv影响join算法数据库选项 - Join_PreferenceJoin_Preference对于多表关联查询,这个选项影响所有joinsv影响join orderDatabase Option - Join_OptimizationJoin_OptimizationPage Page 4949Global TechnologyGlobal Technology影响查询的数据库选项- Join_Preference Option1 Prefer Sort/Merge2 Prefer Nested Loop3 Prefer Nested Loop PD4 Prefer Hash5 Prefer Hash PD6 Prefer PreJoin7 Prefer Sort Merge PD-1 Avoid Sort-Merge-2 Avoid Nested Loop-3 Avoid Nested Loop PD-4 Avoid Hash-5 Avoid Hash PD-6 Avoid PreJoin-7 Avoid Sort-Merge PDJoin_Preference Default = 0 (Optimizer Decides)You can only influence join type from the list of valid join algorithms in the Query Plan, otherwise it will ignore the optionPage Page 5050Global TechnologyGlobal Technology影响查询的数据库选项- Join_Preference下图中的join节点有6种有效的join算法为了避免Sort-Merge joins,使用下面的方法Set temporary option Join_Preference = -1;Page Page 5151Global TechnologyGlobal Technology影响查询的数据库选项- Join_Optimization 选项设为OFF,将按照FROM子句中从左向右的顺序决定表关联的顺序设置这个选项对特定查询有可能起作用 但是只有查询优化器判断错误时才设置这个选项不会影响join算法的选择Join_Optimization Default :ON (Optimizer Decides)Page Page 5252Global TechnologyGlobal Technology影响Hash算法(Join or Group)的数据库选项一般来说Hash算法要比其他算法快v通过改变一些数据库选项,可以增加优化器选择通过改变一些数据库选项,可以增加优化器选择Hash算法的可能性算法的可能性Hash操作总是在Temp CacheTemp Cache中进行中进行vOne reason we recommend allocating caches to allow more Temp Cache memoryvThe options discussed affect memory in the Temp Cache注意: The defaults for these options were established for the average systemvSystems with large memory may be to able to benefitPage Page 5353Global TechnologyGlobal Technology分析Hash-Based 操作All temp cache pages in a hash must be kept pinned in the cache to achieve optimal performanceIn a query plan look at the lines like:Maximum hash pin quote: 1712Final hash buffer count: 1711如果“Final hash buffer count” 的值超过了“Maximum hash pin quota”的值,那么说明hash table需要的buffers数量已经超过了IQ Server允许该hash对象所能使用的pinned buffers最大数量Page Page 5454Global TechnologyGlobal TechnologyMax_Hash_Rows 数据库选项这个选项设置优化器考虑使用hash操作的最大记录行数v如果记录数超过了这个值,那么优化器将不考虑采用hash算法v缺省值 2,500,000 keys v可以动态修改选项值这个选项影响HASH Joins、GROUP BY(HASH)和IN subqueries优化器使用对象估算的记录行数以及记录的尺寸,确定是否采用hash算法vIf the optimizer estimate is incorrect (on the low side) it can lead to problems (thrashing)Page Page 5555Global TechnologyGlobal Technology改变Max_Hash_Rows选项值能够在连接级,用户级或整个server级改变这个选项v如果在server级改变,那么将影响所有连接上运行的查询如果每个用户有至少50 MB的Temp Cache 内存可用,那么可以考虑增加这个选项的值vDetermine the maximum number of concurrent queries that could be runningvDivide that number into Temp Cache Memory allocatedvIf result is more than 50 MB, then increase incrementallyvIf data loads occur on the same server while users are running queries this may not be such a good ideaPage Page 5656Global TechnologyGlobal TechnologyHash_Thrashing_Percent 数据库选项前面提到,如果join的“小端”估算的记录数过低,并且构造的hash表超过了可用的temp cache pages,那么会发生“hash抖动”v抖动意味着页交换发生v发生hash抖动往往是缺少相应索引,造成优化器估算错误如果“hash抖动”过多,server有可能终止查询v数据库选项“HASH_THRASHING_PERCENT” 控制什么时候IQ Server认为“抖动”太多v缺省值是 10 可动态设置This a limit on the percentage of disk i/osPage Page 5757Global TechnologyGlobal TechnologyHash_Pinnable_Cache_Percent 数据库选项这个选项可以设置用户的hash对象能够pin在用户所能使用的Temp Cache内存的百分比vDefault 20 (percent) - 0 to 100 are allowable valuesvDynamically configurable因为这个选项表示的是用户能使用的temp cache的百分比,当改变其他选项(例如:Max_Hash_Rows)时可能需要相应改变这个选项的值vOther options affecting user Temp Cache usage: Sort_Pinnable_Cache_Percent and Bit_Vector_Pinnable_Cache_PercentPage Page 5858Global TechnologyGlobal Technology改变 Hash_Pinnable_Cache_Percent 选项值改变这个选项值时一定要小心!vUse as a Temporary Option in most cases在增加该选项值之前应当考虑下面的事项v增加这个数据库选项的值,可能对使用多个Hash对象的复杂查询(比如查询中有join、group by 和 IN lists)产生不利的影响对于使用一个比较大的hash对象的简单查询,能够从增加该选项值获得好处Page Page 5959Global TechnologyGlobal TechnologyQ & A
展开阅读全文