620 likes | 959 Views
Informix 数据库培训内容. Software Group Services, IBM ShangHai 陆川 2006/02/13. 培训内容:. 1. 参数优化 2. 性能监控 3. 应用程序性能调整 4. 针对 AIX/HP 环境的性能监控和优化 5.TroubleShooting. 1. 参数优化. 介绍 $ONCONFIG 中的关键参数配置. 物理日志. PHYSDBS phydbs # Location (dbspace) of physical log
E N D
Informix数据库培训内容 Software Group Services, IBM ShangHai 陆川 2006/02/13
培训内容: 1.参数优化 2.性能监控 3.应用程序性能调整 4.针对AIX/HP环境的性能监控和优化 5.TroubleShooting
1.参数优化 • 介绍$ONCONFIG中的关键参数配置
物理日志 • PHYSDBS phydbs # Location (dbspace) of physical log • PHYSFILE 1999000 # Physical log file size (Kbytes) • 物理日志保存写前的影像。配置时应注意: • 1.不要存放在rootdbs上; • 2.不要配置的太小,因为写的容量到达75%时会触发checkpoint,而checkpoint会阻塞系统交易; • 3.从9.4版本开始,配置的大小可以超过2GB,以前的版本中配置不能超过2GB
Console • CONSOLE /dev/console # System console message path • 用于保存Console上的出错信息 • 由于机房中不便于工作人员经常出入,因此无法检测到console上可能出现的错误,建议将其输出写到文件,如: • CONSOLE /usr/informix/console.log
Server Num • Server Num 10 # Unique id corresponding to a server instance 当在一台机器上配置多个instance时,需要配置不同的值,数据库启动时根据其确定共享内存的起始地址,范围是0~255
NETTYPE • NETTYPE onsoctcp,1,10,NET # Override sqlhosts nettype parameters 配置poll thread的数量和类型,其中数量是第2列的值,类型是第4列的值,类型有两种类型,CPU和NET。 配置建议: 1.当出现连接的问题或连接速度慢时,应该增加第2列的值; 2.如果使用cpu类型的poll thread,poll thread的数量不能超过cpu vps的数量。
Resident • RESIDENT 0 # Forced residency flag (Yes = 1, No = 0) 数据库所使用的内存页是否驻留,即不被交换出去。
MULTIPROCESSOR • MULTIPROCESSOR 0 # 0 for single-processor, 1 for multi-processor 是否为多CPU的机器。 配置建议:多cpu的机器上配置为1;
Numcpuvps—关键参数 • NUMCPUVPS 1 # Number of user (cpu) vps Informix数据库所使用的cpu 的个数,是关键的参数 配置建议: 1.1个cpu的机器配置为1; 2.2个cpu的机器,如果还有别的应用运行在相同的机器上,配置为1,否则配置为2; 3.对于cpu数据较多的机器,可以在系统运行的高峰期通过操作系统的监控工具来分析cpu的繁忙程度,来决定分配给数据库的cpu数目; Aix的监控工具为nmon或sar Hp-Ux的监控工具为top 4.对于应用程序和数据库运行在同一台机器上的情况,由于cpu可能来回切换次数较多,建议通过batchmark测试来决定给数据库的cpu的数目。
SINGLE_CPU_VP • SINGLE_CPU_VP 0 # If non-zero, limit number of cpu vps to one 是否为单CPU的机器,单CPU的机器上配置为1,多CPU的机器上配置为0
cpu 邦定 –关键参数 • AFF_SPROC 0 # 邦定cpu的cpu起始编号 • AFF_NPROCS 0 # 邦定cpu的数目 Cpu的起始编号从0开始。 建议: 1.邦定的cpu的数目和numcpuvps的值相同,和poll thread的数目相同(当使用cpu类型的poll thread时) 2.使用cpu邦定,减少cpu的切换次数;当AFF_NPROCS为0时,将不使用CPU邦定。 在9.3 for Aix之前的版本,需要通过操作系统命令bindprocessor,使用root账户来绑定cpu。
Locks –关键参数 • LOCKS 8000000 # 最大的锁的个数 配置建议: 1.如果表使用行级锁,锁定一条记录,申请一个锁;如果使用页级锁,相同页面上的记录使用同一个锁; 2.一个锁占用的内存是44字节; 3.最大数目是8000000; 4.如果小型机的内存足够大,建议将其配置为8000000,即最大值; 5.应用运行过程中,如果锁不够,事务将回滚
Buffers—关键参数 • BUFFERS 2000 # 用于缓冲数据页和索引页 注意事项: 大小以2K为单位; 配置建议: 通过运行onstat –p察看读写命中率和ovbuff等值来调整;
Numaiovps—关键参数 • NUMAIOVPS # aio vp的数目 aio vp用于处理io请求。 配置建议: 建议使用kio,不要使用aio;使用kio之后,将此参数的值配置为2或4。 可以通过运行onstat –g rea来监控vp等待的情况;
日志缓冲 • PHYSBUFF 128 # 物理日志缓冲(Kbytes) • LOGBUFF 128 # 逻辑日志缓冲(Kbytes) 配置建议: 1.从buffers中申请,physbuff的个数为2个,logbuff的个数为3个,个数是不可调的; 2.至少配置为128; 3.对于unbuffered log类型的数据库,不要配置的过大,配置过大会浪费内存;
Cleaners –关键参数 • CLEANERS 12 # 清页线索的数目 配置建议: 1.清页线索用于将buffers中的脏页刷新到disk上,因此配置的太小,会影响Checkpoint和LRU writes的性能。 2.一般配置为和lrus的数目相同,32位产品上的最大值为128,64位产品上的最大值为512。
Shmvirtsize—关键的参数 • SHMVIRTSIZE 120000 # 初始Virtual Segment的大小 配置建议: 1.以K为单位; 2.用于用户连接,数据字典缓冲,Statement Cashe,HPL等 3.配置太小,会申请很多的shmadd段,导致性能下降; 4.最好使用1个Virtual Segment,可以通过运行onstat –g seg来监控virtual segment的数目;
SHMADD • SHMADD 8192 #下一个Virtual segments 的大小(Kbytes) 当shmvirtsize不够用时,所动态申请的内存段大小;
shmtotal • SHMTOTAL 0 # informix使用的内存上限 (Kbytes). 配置建议: 使用缺省值0,即不要限制;
CKPTINTVL—关键参数 • CKPTINTVL 300 # checkpoint间隔 配置建议: 1.以秒为单位 2.OLTP系统不宜配置的太大;DSS 类的应用可以配置的大一些; 3.当要大量的装载数据时,可以配置的大些,以减少checkpoint的次数,缩短装数据的时间。 4.根据onstat –m的输出调整
LRUS—关键参数 • LRUS 128 # LRU队列的数目 配置建议: 1.配置的尽量大些,以避免buffer waits 2.配置为和cleaners相同的值;
LRU_MAX_DIRTY和LRU_MIN_DIRTY—关键参数 • LRU_MAX_DIRTY 60 # LRU percent dirty begin cleaning limit • LRU_MIN_DIRTY 50 # LRU percent dirty end cleaning limit 配置建议: 1.当一个LRU队列的脏页的百分比到达LRU_MAX_DIRTY时,会触发LRU Writes,当刷新到LRU_MIN_DIRTY时停止刷新; 2.运行dbimport或load时,建议分别调整为90和80,以降低disk io的次数,缩短装数据的时间; 4.从9.3版本之后,这两个参数可以配置为小数,主要是为了使用大内存机器的需要;
RA_PAGES和RA_THRESHOLD • RA_PAGES 16 # 每次预读的页面的次数 • RA_THRESHOLD 15 # 下次预读开始之前,上次预读所处理的剩余的页面数 配置建议: 1.在页面大小为4K页面的系统中,一般分别配置为16和15; 2.在页面大小为2K页面的系统中,一般分别配置为32和30;
LTXHWM • LTXHWM 40 #长事务的高水位线 用于定义当active transaction的使用百分比达到多少时,即定义为系统发生了长事务; 配置建议:不大于50;
Dbspacetemp –关键参数 • DBSPACETEMP tmpdbs1,tpmdbs2 # 缺省的系统连时表空间 配置建议: 1.用于存放临时数据;
optcompind—关键参数 • OPTCOMPIND 0 # To hint the optimizer 用途:影响优化器选用表连接的方式 配置建议: 1.OLTP的系统中配置为0,使用nested loop join; 2.DSS的系统中配置为2.使用hash join;
onstat –D 监控io读写是否倾斜 INFORMIX-OnLine Version 7.12.UC2 -- On-Line -- Up 122 days 20:48:40 -- 72616 s • Dbspaces • address number flags fchunk nchunks flags owner name • c3fa80e8 1 1 1 1 N informix rootdbs • c3fa84b0 2 2001 2 1 N T informix tempdbs • c3fa8518 3 1 3 1 N informix db1 • c3fa8580 4 1 4 1 N informix db2 • 4 active, 2047 maximum • Chunks • address chk/dbs offset page Rd page Wr pathname • c3fa8150 1 1 0 1259 289 /home/informix/ROOTDBS • c3fa8228 2 2 0 11 11 /home/informix/TEMPDBS • c3fa8300 3 3 0 6 0 /home/informix/db1 • c3fa83d8 4 4 0 6 0 /home/informix/db2 • 4 active, 2047 maximum
onstat –F监控是否有LRU Write及次数 • INFORMIX-OnLine Version 7.12.UC2 -- On-Line -- Up 122 days 20:51:45 -- 72616 s • Fg Writes LRU Writes Chunk Writes • 0 103 311 • address flusher state data • c3faa444 0 I 0 = 0X0 • states: Exit Idle Chunk Lru State ----- I 空闲 C 正在执行checkpoint L 正在执行 LRU Writes
onstat –l 监控物理日志和逻辑日志写 INFORMIX-OnLine Version 7.12.UC2 -- On-Line -- Up 122 days 20:56:26 -- 72616 s • Physical Logging • Buffer bufused bufsize numpages numwrits pages/io • P-2 0 16 274 22 12.45 • phybegin physize phypos phyused %used • 10003f 500 433 0 0.74 • Logical Logging • Buffer bufused bufsize numrecs numpages numwrits recs/pages pages/io • L-2 0 16 2437 113 31 21.6 3.6 • address number flags uniqid begin size used %used • c3ecc55c 1 U-B---- 7 100233 250 250 100.00 • c3ecc578 2 U---C-L 8 10032d 250 106 42.40 • c3ecc594 3 F------ 0 100427 250 0 0.00 • c3ecc5b0 4 F------ 0 100521 250 0 0.00 • c3ecc5cc 5 U-B---- 5 10061b 250 250 100.00 • c3ecc5e8 6 U-B---- 6 100715 250 250 100.00
onstat –m 察看数据库日值的最后20行,checkpoint时间和间隔 • Mon Nov 4 11:23:51 1996 • 11:23:51 Logical Log 7 Complete. • 11:27:10 Checkpoint Completed: duration was 0 seconds. • Tue Dec 31 11:16:01 1996 • 11:16:01 Checkpoint Completed: duration was 0 seconds. • 11:21:00 Checkpoint Completed: duration was 0 seconds. • 11:26:01 Checkpoint Completed: duration was 0 seconds. • 11:36:01 Checkpoint Completed: duration was 0 seconds.
onstat –p 可以监控许多指标 • INFORMIX-OnLine Version 7.12.UC2 -- On-Line -- Up 122 days 20:58:17 -- 72616 s • Profile • dskreads pagreads bufreads %cached dskwrits pagwrits bufwrits %cached • 1535 1548 13734 88.82 484 818 3280 85.24 • isamtot open start read write rewrite delete commit rollbk • 10135 1520 1284 3057 875 6 7 20 0 • ovlock ovuserthread ovbuff usercpu syscpu numckpts flushes • 0 0 0 39.04 28.34 10 70772 • bufwaits lokwaits lockreqs deadlks dltouts ckpwaits compress seqscans • 241 1 11196 0 0 0 174 101 • ixda-RA idx-RA da-RA RA-pgsused lchwaits • 31 0 329 360 40
onstat –R 监控lrus队列的写的情况 • INFORMIX-OnLine Version 7.12.UC2 -- On-Line -- Up 122 days 20:59:53 -- 72616 s • 8 buffer LRU queue pairs • # f/m length % of pair total • 0 F 25 100.0% 25 • 1 m 0 0.0% • 2 f 25 100.0% 25 • 3 m 0 0.0% • 4 f 25 100.0% 25 • 5 m 0 0.0% • 6 f 25 100.0% 25 • 7 m 0 0.0% • 8 f 25 100.0% 25 • 9 m 0 0.0% • 10 f 25 100.0% 25 • 11 m 0 0.0% • 12 f 25 100.0% 25 可以协助你配置lru_max_dirty和lru_min_dirty的值
onstat –g ppf 察看全表扫描的次数较多的表的partnum • Onstat -g ppf • INFORMIX-OnLine Version 7.13.UC2 -- On-Line -- Up 3 days 15:51:58 -- 213816 Kbytes • Partition profiles • partnum lkrqs lkwts dlks touts isrd iswrt isrwt isdel bfrd bfwrt seqsc • 12 0 0 0 0 733836 0 0 0 538183 0 0 • 15 0 0 0 0 253950 0 0 0 605030 0 0 • 20 0 0 0 0 1039 0 0 0 122354 0 0 • 22 0 0 0 0 852962 0 0 0 0 0 0 • 23 0 0 0 0 172 0 0 0 0 0 0 • 24 0 0 0 0 6 0 0 0 0 0 0 • 25 0 0 0 0 36 0 0 0 0 0 0 • 26 0 0 0 0 115627 0 0 0 24 24 0 • 28 0 0 0 0 18 0 0 0 0 0 0 • 40 0 0 0 0 136669 0 0 0 40 24 0 • 43 0 0 0 0 1035 0 0 0 0 0 0
onstat –g seg监控virtual segment的个数 • IBM Informix Dynamic Server Version 9.40.FC4 -- On-Line -- Up 03:26:39 -- 49728 Kbytes • Segment Summary: • id key addr size ovhd class blkused blkfree • 1382041601 1382041601 c000000 9568256 215632 R 2299 37 • 1382041602 1382041602 c920000 8388608 896 V 1433 615 • 1382041603 1382041603 d120000 8388608 896 V 3 2045 • 1382041604 1382041604 d920000 8192000 896 V 1 1999 • 1382041605 1382041605 e0f0000 8192000 896 V 1 1999 • 1382041606 1382041606 e8c0000 8192000 896 V 1 1999 • Total: - - 50921472 - - 3738 8694
onstat –g rea 监控哪种类型vp个数不够 • IBM Informix Dynamic Server Version 9.40.FC4 -- On-Line -- Up 03:29:23 -- 49728 Kbytes • Ready threads: • tid tcb rstcb prty status vp-class name 1cpu sqlexec
onstat –g sql #session_id# /onstat –g ses #session_id# • IBM Informix Dynamic Server Version 9.40.FC3 -- On-Line -- Up 20:25:10 -- 65600 Kbytes Sess SQL Current Iso Lock SQL ISAM F.E. Id Stmt type Database Lvl Mode ERR ERR Vers Explain 211 SELECT stores7 CR Not Wait 0 0 9.03 Off Current statement name : slctcur Current SQL statement : select * from orders Last parsed SQL statement : select * from orders • 通过onstat –g sql –r 2可以捕捉到执行时间较长的sql语句
增加Dictionary Cache --用户表超过250个以上 onstat –g dic • DD_HASHSIZE 97 • DD_HASHMAX 211
免费网站 • www.oninit.com/onstat
应用程序性能优化 • 从应用架构上进行精心的设计,好的架构的设计是性能的保证; • SQL语句的执行效率; • 良好的索引策略; • 至少每隔1周执行update statistics;如果有条件每天执行 update statistics high;保证数据库优化器选择最高效的执行路径;
SQL语句执行性能 • 从应用程序上优化,会从根本上提高系统的性能,sql语句是应用程序的一部分; • 避免在数据量较大的表上进行全表扫描,会导致CPU过长时间的做Disk IO;
如何确认SQL语句的执行性能 • 执行时间是唯一的度量标准,执行开销和执行时间不成正比: time dbaccess #user_db# #your.sql#
如何确认SQL语句的执行路径 SQL语句的执行路径有两种方式: • Index Path • Sequential Scan 在执行sql语句之前,先执行下列sql语句之一: set explain on; set explain on avoid_execute; #并不真正执行sql语句,9.30版本才有的新 特性。 Informix online将此SQL语句的执行计划保存在当前目录的sqexplain.out文件中。
执行计划案例 QUERY SELECT tab1.c2 FROM tab1,tab2 WHERE tab1.c2 = tab2.c2 AND tab1.c2 MATCHES "systable*" Estimated Cost: 321 Estimated # of Rows Returned: 148 1) miller3.tab1: SEQUENTIAL SCAN Filters: miller3.tab1.c2 MATCHES 'systable*' 2) miller3.tab2: INDEX PATH (1) Index Keys: c2 (Key-Only) (Serial, fragments: ALL) Lower Index Filter: miller3.tab2.c2 MATCHES 'systable*' DYNAMIC HASH JOIN Dynamic Hash Filters: miller3.tab1.c2 = miller3.tab2.c2
良好的索引策略 • 按照SQL语句中的where条件中的字段来定义索引; • 应用开发人员不必关心where字句中字段的顺序; • 选择性最高的字段放在复合索引的最前面,依次类推。哪些字段的选择性较高: 出现在等于表达式中的字段; 唯一值很多的字段; • 不同值个数低于10的字段不要出现在索引字段中,会增加更新表的开销; • 从执行计划中可以看到SQL语句所使用的索引; • 可指定索引;
update statistics • 数据库优化器依据下面的4张系统表中的数据来选择每个sql语句最优的执行路径; systable; syscolumns; sysindices; sysdistrib update statistics 有3种运行模式: • low • medium • high 其中medium和high的方式会修改sysdistrib表,因此update statistics medium |high将比缺省的update statistics,即low模式,更能保证系统有较好的执行性能;
指定索引 • SELECT --+ index(emp index_name) • name, salary, deptname • FROM emp e, dept d • WHERE loc = “Denver” • AND e.dno = d.dno
设置kio请求的数目 • export IFMX_AIXKAIO_NUM_REQ = 2048