请教,读cached 命中 76.31是否太低了
新上的综合前置,数据库分区给了 4C8G
数据库配的buf不多,目前数据库占的内存是 4G,数据量 为20G
Informix Dynamic Server Version 9.40.FC1 -- On-Line -- Up 17 days 08:24:55 s
Profile
dskreads pagreads bufreads %cached dskwrits pagwrits bufwrits %cached
134962 84999 416642 67.61 11 6 65 83.08
isamtotopen start read write rewritedelete commit rollbk
4030 427 437 831 8 0 2 10 0
gp_readgp_write gp_rewrt gp_del gp_alloc gp_freegp_curs
0 0 0 0 0 0 0
ovlock ovuserthread ovbuff usercpusyscpu numckpts flushes
0 0 0 1.55 2.81 0 0
bufwaits lokwaits lockreqs deadlksdltoutsckpwaits compress seqscans
4222 0 144125 0 0 0 0 30
ixda-RAidx-RA da-RA RA-pgsused lchwaits
0 0 135104 135025 5
清0后2小时15分得数据
$ onstat -p
Informix Dynamic Server Version 9.40.FC1 -- On-Line -- Up 17 days 10:39:43 s
Profile
dskreads pagreads bufreads %cached dskwrits pagwrits bufwrits %cached
243444972 281117859 1027751166 76.31 80356 110179 213057 62.28
isamtotopen start read write rewritedelete commit rollbk
19823410 16162101621259769290348290 3795 6759 38599 3
gp_readgp_write gp_rewrt gp_del gp_alloc gp_freegp_curs
0 0 0 0 0 0 0
ovlock ovuserthread ovbuff usercpusyscpu numckpts flushes
0 0 0 3414.296861.1227 54
bufwaits lokwaits lockreqs deadlksdltoutsckpwaits compress seqscans
91670100 373072610 0 0 32 4063 78650
ixda-RAidx-RA da-RA RA-pgsused lchwaits
8049 5874 243170840 243184739182662
dskreads pagreads bufreads %cached dskwrits pagwrits bufwrits %cached
243444972 281117859 1027751166 76.31 80356 110179 213057 62.28
这个读写命中率似乎也太低了,本身数据库分了4 G内存,20 G数据感觉不应改是这个命中率,各位大侠有何建议? bufwaits 9167010太高是buf 少了?
还是RA_PAGES 32太大?
还是因为数据库做的 unbuffer log 的原因呀?
数据库独用分区 用的 p570 4C 逻辑cpu是8个,NUMCPUVPS 5 是否合适?
SHMVIRTSIZE 8000 # initial virtual shared memory segment size
SHMADD 8192 # Size of new shared memory segments (Kbytes)
这2个配的太小,配成多少比较合适?
数据库 的 字符集设的是 zh_CN.5488
客户端设置为
CLIENT_LOCALE=ZH_CN.GB18030-2000
DB_LOCALE=ZH_CN.GB18030-2000
LOCPATH=/usr/lib/nls/loc
SERVER_LOCALE=ZH_CN.GB18030-2000
感觉有汉字插入报错,是否需要重新导入数据库?
数据库的配置如下,请各位兄弟拍砖
$ onstat -c
Informix Dynamic Server Version 9.40.FC1 -- On-Line -- Up 17 days 15:57:44 s
Configuration File: /informix/etc/onconfig
#**************************************************************************
#
# INFORMIX SOFTWARE, INC.
#
#Title: onconfig.std
#Description: Informix Dynamic Server Configuration Parameters
#
#**************************************************************************
# Root Dbspace Configuration
ROOTNAME rootdbs # Root dbspace name
ROOTPATH /informix/dbs/rootdbs # Path for device containing root dbspace
ROOTOFFSET 4 # Offset of root dbspace into device (Kbytes)
ROOTSIZE 1000000 # Size of root dbspace (Kbytes)
# Disk Mirroring Configuration Parameters
MIRROR 0 # Mirroring flag (Yes = 1, No = 0)
MIRRORPATH # Path for device containing mirrored root
MIRROROFFSET 0 # Offset into mirrored device (Kbytes)
# Physical Log Configuration
PHYSDBS phydbs # Location (dbspace) of physical log
PHYSFILE 1000000 # Physical log file size (Kbytes)
# Logical Log Configuration
LOGFILES 19 # Number of logical log files
LOGSIZE 30000 # Logical log size (Kbytes)
# Diagnostics
MSGPATH /informix/online.log # System message log file path
CONSOLE /dev/console # System console message path
# To automatically backup logical logs, edit alarmprogram.sh and set
# BACKUPLOGS=Y
#ALARMPROGRAM /informix/etc/alarmprogram.sh # Alarm program path
#ALARMPROGRAM /informix/etc/log_full.sh # Alarm program path
ALARMPROGRAM /informix/etc/no_log.sh # Alarm program path
TBLSPACE_STATS1 # Maintain tblspace statistics
# System Archive Tape Device
TAPEDEV /dev/null # Tape device path
TAPEBLK 32 # Tape block size (Kbytes)
TAPESIZE 10240 # Maximum amount of data to put on tape (Kbytes)
# Log Archive Tape Device
#LTAPEDEV /dev/rmt0 # Log tape device path
LTAPEDEV /dev/null # Log tape device path
LTAPEBLK 32 # Log tape block size (Kbytes)
LTAPESIZE 1024000 # Max amount of data to put on log tape (Kbytes)
# Optical
STAGEBLOB # Informix Dynamic Server staging area
# System Configuration
SERVERNUM 0 # Unique id corresponding to a OnLine instance
DBSERVERNAME www # Name of default database server
DBSERVERALIASES # List of alternate dbservernames
DEADLOCK_TIMEOUT 60 # Max time to wait of lock in distributed env.
RESIDENT 0 # Forced residency flag (Yes = 1, No = 0)
MULTIPROCESSOR1 # 0 for single-processor, 1 for multi-processor
NUMCPUVPS 5 # Number of user (cpu) vps, 20080127 2 -> 7
SINGLE_CPU_VP 0 # If non-zero, limit number of cpu vps to one
NOAGE 1 # Process aging, 20080127 0 -> 1
AFF_SPROC 0 # Affinity start processor
AFF_NPROCS 0 # Affinity number of processors
# Shared Memory Parameters
LOCKS 4000000 # Maximum number of locks
BUFFERS 800000 # Maximum number of shared buffers
NUMAIOVPS # Number of IO vps
PHYSBUFF 128 # Physical log buffer size (Kbytes)
LOGBUFF 128 # Logical log buffer size (Kbytes)
CLEANERS 1 # Number of buffer cleaner processes
SHMBASE 0x700000000000000 # Shared memory base address
SHMVIRTSIZE 8000 # initial virtual shared memory segment size
SHMADD 8192 # Size of new shared memory segments (Kbytes)
SHMTOTAL 0 # Total shared memory (Kbytes). 0=>unlimited
CKPTINTVL 300 # Check point interval (in sec)
LRUS 8 # Number of LRU queues
LRU_MAX_DIRTY 60.000000 # LRU percent dirty begin cleaning limit
LRU_MIN_DIRTY 50.000000 # LRU percent dirty end cleaning limit
TXTIMEOUT 0x12c # Transaction timeout (in sec)
STACKSIZE 64
# Dynamic Logging
# DYNAMIC_LOGS:
# 2 : server automatically add a new logical log when necessary. (ON)
# 1 : notify DBA to add new logical logs when necessary. (ON)
# 0 : cannot add logical log on the fly. (OFF)
#
# When dynamic logging is on, we can have higher values for LTXHWM/LTXEHWM,
# because the server can add new logical logs during long transaction rollback.
# However, to limit the number of new logical logs being added, LTXHWM/LTXEHWM
# can be set to smaller values.
#
# If dynamic logging is off, LTXHWM/LTXEHWM need to be set to smaller values
# to avoid long transaction rollback hanging the server due to lack of logical
# log space, i.e. 50/60 or lower.
DYNAMIC_LOGS 2
LTXHWM 70
LTXEHWM 80
# System Page Size
# BUFFSIZE - OnLine no longer supports this configuration parameter.
# To determine the page size used by OnLine on your platform
# see the last line of output from the command, 'onstat -b'.
# Recovery Variables
# OFF_RECVRY_THREADS:
# Number of parallel worker threads during fast recovery or an offline restore.
# ON_RECVRY_THREADS:
# Number of parallel worker threads during an online restore.
OFF_RECVRY_THREADS 10 # Default number of offline worker threads
ON_RECVRY_THREADS 1 # Default number of online worker threads
# Data Replication Variables
DRINTERVAL 30 # DR max time between DR buffer flushes (in sec)
DRTIMEOUT 30 # DR network timeout (in sec)
DRLOSTFOUND /informix/etc/dr.lostfound # DR lost+found file path
# CDR Variables
CDR_EVALTHREADS 1,2 # evaluator threads (per-cpu-vp,additional)
CDR_DSLOCKWAIT5 # DS lockwait timeout (seconds)
CDR_QUEUEMEM 4096 # Maximum amount of memory for any CDR queue (K)
CDR_NIFCOMPRESS 0 # Link level compression (-1 never, 0 none, 9 m)
CDR_SERIAL 0,0 # Serial Column Sequence
CDR_DBSPACE # dbspace for syscdr database
CDR_QHDR_DBSPACE # CDR queue dbspace (default same as catalog)
CDR_QDATA_SBSPACE # List of CDR queue smart blob spaces
# CDR_MAX_DYNAMIC_LOGS
# -1 => unlimited
#0 => disable dynamic log addition
# >0 => limit the no. of dynamic log additions with the specified value.
# Max dynamic log requests that CDR can make within one server session.
CDR_MAX_DYNAMIC_LOGS 0 # Dynamic log addition disabled by default
# Backup/Restore variables
BAR_BSALIB_PATH /usr/tivoli/tsm/client/informix/bin64/bsashr10.o
BAR_ACT_LOG /informix/bar_act.log # ON-Bar Log file - not in /tmp please
BAR_DEBUG_LOG /informix/bar_dbug.log
# ON-Bar Debug Log - not in /tmp please
BAR_MAX_BACKUP1
BAR_RETRY 1
BAR_NB_XPORT_COUNT 10
BAR_XFER_BUF_SIZE 31
RESTARTABLE_RESTORE on
BAR_PROGRESS_FREQ 0
# Informix Storage Manager variables
ISM_DATA_POOL ISMData
ISM_LOG_POOL ISMLogs
# Read Ahead Variables
RA_PAGES 32 # Number of pages to attempt to read ahead, 2002
RA_THRESHOLD # Number of pages left before next group
# DBSPACETEMP:
# OnLine equivalent of DBTEMP for SE. This is the list of dbspaces
# that the OnLine SQL Engine will use to create temp tables etc.
# If specified it must be a colon separated list of dbspaces that exist
# when the OnLine system is brought online.If not specified, or if
# all dbspaces specified are invalid, various ad hoc queries will create
# temporary files in /tmp instead.
DBSPACETEMP tmpdbs # Default temp dbspaces
# DUMP*:
# The following parameters control the type of diagnostics information which
# is preserved when an unanticipated error condition (assertion failure) occurs
# during OnLine operations.
# For DUMPSHMEM, DUMPGCORE and DUMPCORE 1 means Yes, 0 means No.
DUMPDIR /tmp # Preserve diagnostics in this directory
DUMPSHMEM 1 # Dump a copy of shared memory
DUMPGCORE 0 # Dump a core image using 'gcore'
DUMPCORE 0 # Dump a core image (Warning:this aborts OnLine)
DUMPCNT 1 # Number of shared memory or gcore dumps for
# a single user's session
FILLFACTOR 90 # Fill factor for building indexes
# method for OnLine to use when determining current time
USEOSTIME 0 # 0: use internal time(fast), 1: get time from )
# Parallel Database Queries (pdq)
MAX_PDQPRIORITY 100 # Maximum allowed pdqpriority
DS_MAX_QUERIES # Maximum number of decision support queries
DS_TOTAL_MEMORY # Decision support memory (Kbytes)
DS_MAX_SCANS 1048576 # Maximum number of decision support scans
DATASKIP off # List of dbspaces to skip
# OPTCOMPIND
# 0 => Nested loop joins will be preferred (where
# possible) over sortmerge joins and hash joins.
# 1 => If the transaction isolation mode is not
# "repeatable read", optimizer behaves as in (2)
# below.Otherwise it behaves as in (0) above.
# 2 => Use costs regardless of the transaction isolation
# mode.Nested loop joins are not necessarily
# preferred.Optimizer bases its decision purely
# on costs.
OPTCOMPIND 2 # To hint the optimizer
DIRECTIVES 1 # Optimizer DIRECTIVES ON (1/Default) or OFF (0
ONDBSPACEDOWN 2 # Dbspace down option: 0 = CONTINUE, 1 = ABORT,T
OPCACHEMAX 0 # Maximum optical cache size (Kbytes)
# HETERO_COMMIT (Gateway participation in distributed transactions)
# 1 => Heterogeneous Commit is enabled
# 0 (or any other value) => Heterogeneous Commit is disabled
HETERO_COMMIT 0
SBSPACENAME # Default smartblob space name - this is where s
# go if no sbspace is specified when the smartblob is
# created. It is also used by some datablades as
# the location to put their smartblobs.
SYSSBSPACENAME # Default smartblob space for use by the Inform
# Server. This is used primarily for Informix Server
# system statistics collection.
BLOCKTIMEOUT 3600 # Default timeout for system block
SYSALARMPROGRAM /informix/etc/evidence.sh # System Alarm program path
# Optimization goal: -1 = ALL_ROWS(Default), 0 = FIRST_ROWS
OPT_GOAL -1
ALLOW_NEWLINE 0 # embedded newlines(Yes = 1, No = 0 or anything)
#
# The following are default settings for enabling Java in the database.
# Replace all occurrences of /usr/informix with the value of $INFORMIXDIR.
#VPCLASS jvp,num=1 # Number of JVPs to start with
JVPJAVAHOME /usr/informix/extend/krakatoa/jre
# JRE installation root directory
JVPHOME /usr/informix/extend/krakatoa # Krakatoa installation directory
JVPPROPFILE /usr/informix/extend/krakatoa/.jvpprops # JVP property file
JDKVERSION 1.3 # JDK version supported by this server
# The path to the JRE libraries relative to JVPJAVAHOME
JVPJAVALIB /bin
# The JRE libraries to use for the Java VM
JVPJAVAVM hpi:jvm:java:net:zip:jpeg
# use JVPARGS to change Java VM configuration
#To display jni call
#JVPARGS -verbose:jni
# Classpath to use upon Java VM start-up (use _g version for debugging)
#JVPCLASSPATH/usr/informix/extend/krakatoa/krakatoa_g.jar:/usr/informix/extenr
JVPCLASSPATH /usr/informix/extend/krakatoa/krakatoa.jar:/usr/informix/extendr
$ # Shared Memory Parameters
LOCKS 4000000 # Maximum number of locks
BUFFERS 800000 # Maximum number of shared buffers
NUMAIOVPS # Number of IO vps
这里 BUFFERS 才800,000 ..似乎可以加大些..............限制数据库只用4G的话BUFFERS可以1,200,000.
对于
数据库独用分区 用的 p570 4C 逻辑cpu是8个,NUMCPUVPS 5 是否合适?
SHMVIRTSIZE 8000 # initial virtual shared memory segment size
SHMADD 8192 # Size of new shared memory segments (Kbytes)
NUMCPUVPS 配置建议,当8个时,配置为8*0.7=5.6,则配置为5,合适.
Number of CPUs MUTIPROCESSOR NUMCPUVPS SINGLE_CPU_VP
1 0 1 1
2 1 1 1
3-7 1 CPU个数-1 0
>7 1 CPU个数×0.7 0
对于SHMADD/SHMVIRTSIZE
SHMADD 指定将动态添加至 Informix 通用服务器共享内存的虚拟部分的内存段的大小。
推荐设置:
物理内存 SHMADD 值
< 256MB 8192 KB
> 256MB 和 < 512MB 16384 KB
> 512MB 32768 KB
onconfig 文件设置推荐值:SHMADD 32768 1. 读命中率低很可能是两个原因导致: i) 共享内存分配不足。你的主机8g内存,如果只跑数据库可以设定到4g,如果还有其他应用在此机运行,可以考虑分配给数据库共享内存为30%,如2g。 ii)可能当前dbms中对sql的执行计划已经老化,导致数据在disk与memory中的交换效率低,可以执行update statistics操作更新sql执行计划。同时onstat -z清空记录,过一段时间再onstat -p观察结果。
2. 你的$ONCONFIG中几个参数配置建议如下:
不晓得你的库中运行更新的sql操作是否频繁,online日志中记录的ckp执行时长是多少,从现在的配置看应该不会触发LRU写来分担CKP写的压力,而且物理日志空间中
PHYDBS 目前设定1g,有点儿大,基本不会触发达到75%物理日志空间时执行CKP的操作,而且执行恢复操作的时间也会长。建议更新为50m或100m
NUMCPUVPS 可以按物理cpu数 -1的值来设定,即7,同时设定AFF_SPROC 1 AFF_NPROCS 7
DUMPSHMEM建议设定为0,这样在db crash时可以不导出内核信息,即不生成shmem文件
LRU_MIN_DIRTY 0
LRU_MAX_DIRTY 0.5这两个参数的调整合理可以触发LRU写来分担CKP写的压力,缩短CKP写的执行时长 在9.4版本里不支持
LRU_MAX_DIRTY 0.5 为小数.......
LRU_MAX/MIN_DIRTY 这参数建议视情况而定....
============================
2. 你的$ONCONFIG中几个参数配置建议如下:
不晓得你的库中运行更新的sql操作是否频繁,online日志中记录的ckp执行时长是多少,从现在的配置看应该不会触发LRU写来分担CKP写的压力,而且物理日志空间中
PHYDBS 目前设定1g,有点儿大,基本不会触发达到75%物理日志空间时执行CKP的操作,而且执行恢复操作的时间也会长。建议更新为50m或100m
NUMCPUVPS 可以按物理cpu数 -1的值来设定,即7,同时设定AFF_SPROC 1 AFF_NPROCS 7
DUMPSHMEM建议设定为0,这样在db crash时可以不导出内核信息,即不生成shmem文件
LRU_MIN_DIRTY 0
LRU_MAX_DIRTY 0.5这两个参数的调整合理可以触发LRU写来分担CKP写的压力,缩短CKP写的执行时长 不一定是高了就好。太高可能是表明你的程序执行了太多的逻辑读。关键看当时数据库执行的具体的应用是什么。比如一个程序反反复复执行一个select,该查询就是查当前的某个表登记的业务日期。
这个时候,程序执行了太多的逻辑读。此时的hit就会很高。相应的,如果你能在程序里面一次读出这个日期,以后每次直接从变量里面读取,可能会是更好的办法。但是这样一来,通过系统的观察,看到的hit就会明显的降低。但是,实际上,确实会明显的提高应用的处理能力。
不知道我说的是不是对。 buf 应该是小了,查了下数据库,20G的数据里竟然有个5G的用户协议表,而且这个协议表是索引随机访问的,估计预读对这个表作用有限
目前分区是8G内存, 数据库占 4780176 Kbytes ,准备先调到6G再看看效果。
昨晚跑了update statistics ,接近20分钟,感觉命中率改善不大
onstat -z 清0后,10小时的数据
Informix Dynamic Server Version 9.40.FC1 -- On-Line -- Up 19 days 06:53:05 -
- 4780176 Kbytes
Profile
dskreads pagreads bufreads %cached dskwrits pagwrits bufwrits %cached
983840979 1101579221 4951842381 80.13 440698 955466 475223090.73
isamtotopen start read write rewritedelete commit rollbk
42728661 2313667244477218276490 38543 13464 468772 60227 2
gp_readgp_write gp_rewrt gp_del gp_alloc gp_freegp_curs
0 0 0 0 0 0 0
ovlock ovuserthread ovbuff usercpusyscpu numckpts flushes
0 0 0 13928.18 26005.40 112 224
bufwaits lokwaits lockreqs deadlksdltoutsckpwaits compress seqscans
35988936 81 1538362578 0 0 40 7258 164357
ixda-RAidx-RA da-RA RA-pgsused lchwaits
439917 8470 982109758 96543288111562269
原帖由 hanyu 于 2008-2-19 08:57 发表 http://bbs.chinaunix.net/images/common/back.gif
buf 应该是小了,查了下数据库,20G的数据里竟然有个5G的用户协议表,而且这个协议表是索引随机访问的,估计预读对这个表作用有限
目前分区是8G内存, 数据库占 4780176 Kbytes ,准备先调到6G再看看效果。
昨 ...
这里显示的bufwaits大多了...增大一些BUF....
bufwaits lokwaits lockreqs deadlksdltoutsckpwaits compress seqscans
35988936 81 1538362578 0 0 40 7258 164357 奇怪,这几天 ,数据库表并无任何调整,但命中率突然有显著提高,难道真的是update statistics 的原因,准备再观察几天
$ onstat -p
Informix Dynamic Server Version 9.40.FC1 -- On-Line -- Up 22 days 15:54:43 -
- 4927632 Kbytes
Profile
dskreads pagreads bufreads %cached dskwrits pagwrits bufwrits %cached
170107327 196569456 97721493116 99.83 677610315038660 54456457 87.56
isamtotopen start read write rewritedelete commit rollbk
1501499068 46461948 46834472 921999305 12069389 27356180 321047223402642243
gp_readgp_write gp_rewrt gp_del gp_alloc gp_freegp_curs
0 0 0 0 0 0 0
ovlock ovuserthread ovbuff usercpusyscpu numckpts flushes
0 0 0 167999.81 71636.52 806 1612
bufwaits lokwaits lockreqs deadlksdltoutsckpwaits compress seqscans
53887117411 16118752653 3 0 1671 452971 2723547
ixda-RAidx-RA da-RA RA-pgsused lchwaits
1268115151490 161444696 155192640429398338
页:
[1]