1 / 62

Informix 数据库培训内容

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

cheng
Download Presentation

Informix 数据库培训内容

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Informix数据库培训内容 Software Group Services, IBM ShangHai 陆川 2006/02/13

  2. 培训内容: 1.参数优化 2.性能监控 3.应用程序性能调整 4.针对AIX/HP环境的性能监控和优化 5.TroubleShooting

  3. 1.参数优化 • 介绍$ONCONFIG中的关键参数配置

  4. 物理日志 • 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

  5. Console • CONSOLE /dev/console # System console message path • 用于保存Console上的出错信息 • 由于机房中不便于工作人员经常出入,因此无法检测到console上可能出现的错误,建议将其输出写到文件,如: • CONSOLE /usr/informix/console.log

  6. Server Num • Server Num 10 # Unique id corresponding to a server instance 当在一台机器上配置多个instance时,需要配置不同的值,数据库启动时根据其确定共享内存的起始地址,范围是0~255

  7. 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的数量。

  8. Resident • RESIDENT 0 # Forced residency flag (Yes = 1, No = 0) 数据库所使用的内存页是否驻留,即不被交换出去。

  9. MULTIPROCESSOR • MULTIPROCESSOR 0 # 0 for single-processor, 1 for multi-processor 是否为多CPU的机器。 配置建议:多cpu的机器上配置为1;

  10. 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的数目。

  11. SINGLE_CPU_VP • SINGLE_CPU_VP 0 # If non-zero, limit number of cpu vps to one 是否为单CPU的机器,单CPU的机器上配置为1,多CPU的机器上配置为0

  12. 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。

  13. Locks –关键参数 • LOCKS 8000000 # 最大的锁的个数 配置建议: 1.如果表使用行级锁,锁定一条记录,申请一个锁;如果使用页级锁,相同页面上的记录使用同一个锁; 2.一个锁占用的内存是44字节; 3.最大数目是8000000; 4.如果小型机的内存足够大,建议将其配置为8000000,即最大值; 5.应用运行过程中,如果锁不够,事务将回滚

  14. Buffers—关键参数 • BUFFERS 2000 # 用于缓冲数据页和索引页 注意事项: 大小以2K为单位; 配置建议: 通过运行onstat –p察看读写命中率和ovbuff等值来调整;

  15. Numaiovps—关键参数 • NUMAIOVPS # aio vp的数目 aio vp用于处理io请求。 配置建议: 建议使用kio,不要使用aio;使用kio之后,将此参数的值配置为2或4。 可以通过运行onstat –g rea来监控vp等待的情况;

  16. 日志缓冲 • PHYSBUFF 128 # 物理日志缓冲(Kbytes) • LOGBUFF 128 # 逻辑日志缓冲(Kbytes) 配置建议: 1.从buffers中申请,physbuff的个数为2个,logbuff的个数为3个,个数是不可调的; 2.至少配置为128; 3.对于unbuffered log类型的数据库,不要配置的过大,配置过大会浪费内存;

  17. Cleaners –关键参数 • CLEANERS 12 # 清页线索的数目 配置建议: 1.清页线索用于将buffers中的脏页刷新到disk上,因此配置的太小,会影响Checkpoint和LRU writes的性能。 2.一般配置为和lrus的数目相同,32位产品上的最大值为128,64位产品上的最大值为512。

  18. Shmvirtsize—关键的参数 • SHMVIRTSIZE 120000 # 初始Virtual Segment的大小 配置建议: 1.以K为单位; 2.用于用户连接,数据字典缓冲,Statement Cashe,HPL等 3.配置太小,会申请很多的shmadd段,导致性能下降; 4.最好使用1个Virtual Segment,可以通过运行onstat –g seg来监控virtual segment的数目;

  19. SHMADD • SHMADD 8192 #下一个Virtual segments 的大小(Kbytes) 当shmvirtsize不够用时,所动态申请的内存段大小;

  20. shmtotal • SHMTOTAL 0 # informix使用的内存上限 (Kbytes). 配置建议: 使用缺省值0,即不要限制;

  21. CKPTINTVL—关键参数 • CKPTINTVL 300 # checkpoint间隔 配置建议: 1.以秒为单位 2.OLTP系统不宜配置的太大;DSS 类的应用可以配置的大一些; 3.当要大量的装载数据时,可以配置的大些,以减少checkpoint的次数,缩短装数据的时间。 4.根据onstat –m的输出调整

  22. LRUS—关键参数 • LRUS 128 # LRU队列的数目 配置建议: 1.配置的尽量大些,以避免buffer waits 2.配置为和cleaners相同的值;

  23. 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版本之后,这两个参数可以配置为小数,主要是为了使用大内存机器的需要;

  24. RA_PAGES和RA_THRESHOLD • RA_PAGES 16 # 每次预读的页面的次数 • RA_THRESHOLD 15 # 下次预读开始之前,上次预读所处理的剩余的页面数 配置建议: 1.在页面大小为4K页面的系统中,一般分别配置为16和15; 2.在页面大小为2K页面的系统中,一般分别配置为32和30;

  25. LTXHWM • LTXHWM 40 #长事务的高水位线 用于定义当active transaction的使用百分比达到多少时,即定义为系统发生了长事务; 配置建议:不大于50;

  26. Dbspacetemp –关键参数 • DBSPACETEMP tmpdbs1,tpmdbs2 # 缺省的系统连时表空间 配置建议: 1.用于存放临时数据;

  27. optcompind—关键参数 • OPTCOMPIND 0 # To hint the optimizer 用途:影响优化器选用表连接的方式 配置建议: 1.OLTP的系统中配置为0,使用nested loop join; 2.DSS的系统中配置为2.使用hash join;

  28. 2.性能监控

  29. 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

  30. 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

  31. 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

  32. 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.

  33. 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

  34. 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的值

  35. 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

  36. 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

  37. 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

  38. 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语句

  39. 增加Dictionary Cache --用户表超过250个以上 onstat –g dic • DD_HASHSIZE 97 • DD_HASHMAX 211

  40. 免费网站 • www.oninit.com/onstat

  41. 应用程序性能优化 • 从应用架构上进行精心的设计,好的架构的设计是性能的保证; • SQL语句的执行效率; • 良好的索引策略; • 至少每隔1周执行update statistics;如果有条件每天执行 update statistics high;保证数据库优化器选择最高效的执行路径;

  42. SQL语句执行性能 • 从应用程序上优化,会从根本上提高系统的性能,sql语句是应用程序的一部分; • 避免在数据量较大的表上进行全表扫描,会导致CPU过长时间的做Disk IO;

  43. 如何确认SQL语句的执行性能 • 执行时间是唯一的度量标准,执行开销和执行时间不成正比: time dbaccess #user_db# #your.sql#

  44. 如何确认SQL语句的执行路径 SQL语句的执行路径有两种方式: • Index Path • Sequential Scan 在执行sql语句之前,先执行下列sql语句之一: set explain on; set explain on avoid_execute; #并不真正执行sql语句,9.30版本才有的新 特性。 Informix online将此SQL语句的执行计划保存在当前目录的sqexplain.out文件中。

  45. 执行计划案例 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

  46. 良好的索引策略 • 按照SQL语句中的where条件中的字段来定义索引; • 应用开发人员不必关心where字句中字段的顺序; • 选择性最高的字段放在复合索引的最前面,依次类推。哪些字段的选择性较高: 出现在等于表达式中的字段; 唯一值很多的字段; • 不同值个数低于10的字段不要出现在索引字段中,会增加更新表的开销; • 从执行计划中可以看到SQL语句所使用的索引; • 可指定索引;

  47. update statistics • 数据库优化器依据下面的4张系统表中的数据来选择每个sql语句最优的执行路径; systable; syscolumns; sysindices; sysdistrib update statistics 有3种运行模式: • low • medium • high 其中medium和high的方式会修改sysdistrib表,因此update statistics medium |high将比缺省的update statistics,即low模式,更能保证系统有较好的执行性能;

  48. 指定索引 • SELECT --+ index(emp index_name) • name, salary, deptname • FROM emp e, dept d • WHERE loc = “Denver” • AND e.dno = d.dno

  49. 4.AIX/HP环境的性能监控和优化

  50. 设置kio请求的数目 • export IFMX_AIXKAIO_NUM_REQ = 2048

More Related