kingbase.conf
###记录锁等待超过1s的操作
log_lock_waits=on
deadlock_timeout=1s
###记录连接和断开连接的记录
log_disconnections=on
log_connections=on
###打开代码位置信息的输出
log_error_verbosity=verbose (默认值为default)
例:"PostmasterMain, postmaster.c:1379" 函数,程序文件:行数
###修改输出sql截断的位置,越大越耗内存(不过2048可以忽略不计为2k)单位为KB,可以显示更长的sql,默认1024
track_activity_query_size=2048
###TCP会话心跳包在linux下面默认是2小时,如果已经修改了系统内核参数,则不需要再修改这里
###为防止客户端和服务端之间的网络设备主动关闭空闲tcp会话,可以设置上面3个参数。
###--每隔60s发一次心跳包,防止会话因这个tcp断开
tcp_keepalives_idle=60
tcp_keepalives_interval=10
tcp_keepalives_count=6
###默认autovacuum是开的,log_autovacuum_min_duration=0记录所有autovacuum信息到syslog日志中,默认为-1
autovacuum=on
log_autovacuum_min_duration=0
###监控io时间,会带来很大开销,一般不建议打开
track_io_timing=on
###该模块用于收集sql层面统计信息,sql被执行了多少次,总耗时,命中率,io耗时等,一般用于发现业务频繁调用sql是什么,进行针对优化
shared_preload_libraries='sys_stat_statements'
sys_stat_statements.max=5000
sys_stat_statements.track=none
sys_stat_statements.track_utility
###连续数据块扫描的成本因子(代价),表示扫描1个块的成本,例如全表扫描
seq_page_cost=1.0
###离散数据块扫描的成本因子,例如索引扫描
random_page_cost=4.0 --ssd盘建议该值调小到趋向seq_page_cost甚至相等
###每一行cpu的开销
cpu_tuple_cost=0.01
###每一个索引条目的cpu开销
cpu_index_tuple_cost=0.005
###每一个操作符的cpu开销,如果操作符的开销被重新定义,那么需要乘以这个因子
cpu_operator_cost=0.0025
###提示系统内存可用量,如大的值更偏向走索引、小的值则偏向全表扫描
effective_cache_size=4GB
==========================
explain (analyze,verbose,buffers,costs,timing) select * from t1;
--------------------------------------------------------------------------------------------------------
Seq Scan on public.t1 (cost=0.00..35.40 rows=2540 width=4) (actual time=0.015..0.019 rows=10 loops=1)
Output: a 启动成本 实际成本(含启动) 返回行数 平均宽度 启动时间 实际用时间(含启动) 返回函数 循环次数
Buffers: shared hit=1 --代表sharebuffer里命中了1个数据块
Planning Time: 0.059 ms
Execution Time: 0.097 ms
(5 rows)
1.常用日志参数
logging_collector = on/off
是否将日志重定向至文件中,默认是off(该配置修改后,需要重启DB服务),启动之后查看进程ps -ef|grep postgres,会多一个logger进程。
log_directory = 'pg_log'
日志文件目录,默认是PGDATA的相对路径,即PGDATA的相对路径,即{PGDATA}/pg_log,也可以改为绝对路径,可以定义在其他目录或者分区,但是必须先创建此目录,并修改权限。
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
日志文件命名形式,使用默认即可
log_rotation_age = 1d
单个日志文件的生存期,默认1天,在日志文件大小没有达到log_rotation_size时,一天只生成一个日志文件
log_rotation_size = 10MB
单个日志文件的大小,如果时间没有超过log_rotation_age,一个日志文件最大只能到10M,否则将新生成一个日志文件。
log_truncate_on_rotation = off
当日志文件已存在时,该配置如果为off,新生成的日志将在文件尾部追加,如果为on,则会覆盖原来的日志。
log_ lock_waits = off
控制当一个会话等待时间超过deadlock_timeout而被锁时是否产生一个日志信息。在判断一个锁等待是否会影响性能时是有用的,缺省是off。
log_statement = 'none'
# none, ddl, mod, all ---- 控制记录哪些SQL语句。none不记录,ddl记录所有数据定义命令,比如CREATE,ALTER,和DROP 语句。mod记录所有ddl语句,加上数据修改语句INSERT,UPDATE等,all记录所有执行的语句,将此配置设置为all可跟踪整个数据库执行的SQL语句。
log_duration = off
记录每条SQL语句执行完成消耗的时间,将此配置设置为on,用于统计哪些SQL语句耗时较长。
log_min_duration_statement = -1
# -1示不可用,0将记录所有SQL语句和它们的耗时,>0只记录那些耗时超过(或等于)这个值(ms)的SQL语句。个人更喜欢使用该配置来跟踪那些耗时较长,可能存在性能问题的SQL语句。虽然使用 log_statement和log_duration也能够统计SQL语句及耗时,但是SQL语句和耗时统计结果可能相差很多行,或在不同的文件中,但是log_min_duration_statement会将SQL语句和耗时在同一行记录,更方便阅读。
log_connections = off
是否记录连接日志
log_disconnections = off
是否记录连接断开日志
log_line_prefix = '%m %p %u %d %r '
日志输出格式(%m,%p实际意义配置文件中有解释),可根据自己需要设置(能够记录时间,用户名称,数据库名称,客户端IP和端口,方便定位问题)
log_timezone = 'Asia/Shanghai'
日志时区,最好和服务器设置同一个时区,方便问题定位
log_filename
设置日志文件名,需结合log_truncate_on_rotation = on使用.可根据自己的需要调整, 例如:
====
系统参数详解:
net.ipv4.tcp_syncookies = 1
#表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来 处理,可防范少量SYN,默认为0,表示关闭;
net.ipv4.tcp_tw_reuse = 1
#表示开启重用。允许将TIME-WAIT sockets 重新用于新的TCP连接,默 认为0,表示关闭;
net.ipv4.tcp_tw_recycle = 1
#表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示 关闭。
net.ipv4.tcp_tw_timestamps=1
#启动TCP时间戳
net.ipv4.tcp_fin_timeout = 30
#表示如果套接字由本端要求关闭,这个参数决定了它保持在 FIN-WAIT-2状态的时间
net.ipv4.tcp_keepalive_time = 1200
#表示当keepalive起用的时候,TCP 发送keepalive消息的频度。缺省是 2小时,改为20分钟。
net.ipv4.tcp_keepalive_probes = 3
#TCP发送keepalive探测以确定该连接已经断开的次数。在认定连接失 效之前,发送多少个TCP的keepalive探测包,缺省值是9。这个值乘以 tcp_keepalive_intvl之后决定了,一个连接发送了keepalive之后可以有多 少时间没有回应
net.ipv4.tcp_keepalive_intvl = 30
#探测消息发送的频率,乘以tcp_keepalive_probes就得到对于从开始探 测以来没有响应的连接杀除的时间,默认值为75秒,改小可以加速丢弃 没有活动的连接
net.ipv4.ip_local_port_range = 10000 65000
#表示用于向外连接的端口范围。缺省情况下很小:32768到61000,改 为10000到65000。
net.ipv4.tcp_max_tw_buckets = 6000
#表示系统同时保持TIMEWAIT套接字的最大数量,如果超过这个数字, TIMEWAIT套接字将立刻被清除并打印 警告信息。默认为180000,改 为6000。
net.ipv4.tcp_max_syn_backlog = 8192
##表示指定所能接受SYN同步包的最大客户端数量,即半连接上限。默 认为1024,加大队列长度为8192,可以容纳更多等待连接的网络连接数。
net.core.netdev_max_backlog = 32768
#当网卡接收数据包的速度大于内核处理的速度时,会有一个队列保存这 些数据包。这个参数表示该队列的最大值
net.core.wmem_default = 8388608
#定义默认的TCP数据发送窗口大小,默认值为229376字节
net.core.rmem_default = 8388608
#定义默认的TCP数据接收窗口大小,默认值为229376字节
net.core.rmem_max = 16777216
#定义TCP数据接收窗口的最大大小,默认值为131071字节
net.ipv4.tcp_synack_retries = 2
#tcp_synack_retries 显示或设定 Linux 核心在回应 SYN 要求时会尝试 多少次重新发送初始 SYN,ACK 封包后才决定放弃。这是所谓的三段交 握 (threeway handshake) 的第二个步骤。即是说系统会尝试多少次去建 立由远端启始的 TCP 连线。tcp_synack_retries 的值必须为正整数,并 不能超过 255。因为每一次重新发送封包都会耗费约 30 至 40 秒去等 待才决定尝试下一次重新发送或决定放弃。tcp_synack_retries的缺省值 为 5,即每一个连线要在约 180 秒 (3 分钟) 后才确定逾时。
net.ipv4.tcp_syn_retries = 2
#对于一个新建连接,内核要发送多少个 SYN 连接请求才决定放弃。不 应该大于255,默认值是5,对应于180秒左右时间。(对于大负载而物 理通信良好的网络而言,这个值偏高,可修改为2.这个值仅仅是针对对外 的连接,对进来的连接,是由tcp_retries1 决定的)
net.ipv4.route.gc_timeout = 100
#路由缓存刷新频率,当一个路由失败后多长时间跳到另一个路由,默认 是300。
net.ipv4.tcp_wmem = 8192 436600 873200
#为自动调优定义每个 socket 使用的内存。
#第一个值是为 socket 的发送缓冲区分配的最少字节数。
#第二个值是默认值(该值会被 wmem_default 覆盖),缓冲区在系统负 载不重的情况下可以 增长到这个值。
#第三个值是发送缓冲区空间的最大字节数(该值会被 wmem_max 覆 盖)。
net.ipv4.tcp_rmem = 32768 436600 873200
#与 tcp_wmem 类似,不过它表示的是为自动调优所使用的接收缓冲区 的值。
net.ipv4.tcp_mem = 94500000 91500000 92700000
#确定 TCP 栈应该如何反映内存使用;每个值的单位都是内存页(通常 是 4KB)。
#第一个值是内存使用的下限。
#第二个值是内存压力模式开始对缓冲区使用应用压力的上限。
#第三个值是内存上限。在这个层次上可以将报文丢弃,从而减少对内存 的使用。对于较大的 BDP 可以增大这些值(但是要记住,其单位是内 存页,而不是字节)。
net.ipv4.tcp_max_orphans = 3276800
#最大孤儿套接字(orphan sockets)数,单位是个
附录2
数据库参数详解:
listen_addresses='*'
#表示kingbase监听程序绑定在所有本地IP上。先通过listen_address来 过滤连接。比先设置listen_address = '*' 再验证sys_hba.conf文件效率高, 耗费的资源少。
port=54321
#表示数据库端口为54321(默认为54321,如与其他应用冲突,可更改)
max_connections=1000
#表示最大连接数。不应比实际值多太多,增大这个参数可能会让数据库 申请更多的System V共享内存或信号灯,这可能会因为超过操作系统默 认配置值导致无法启动。
shared_buffers=RAM*0.4GB
#KingbaseES 统一管理实例所用的内存资源。配置参数 shared_buffers 决定了数据库实例使用多少内存。当系统启动时,数据库实例向操作系 统申请一块大内存(大小由 shared_buffers 决定)作为共享内存。在这 之后各个线程对内存资源的使用都在这块内存里操作。推荐设置值为物 理内存的25% ~ 40%。
work_mem =10MB
#声明内部排序和哈希操作可使用的工作内存大小。该内存是在开始使用 临时磁盘文件之前使用的内存数目。数值以kB为单位的,缺省是 1024 (1MB)。请注意对于复杂的查询,可能会同时并发运行好几个排序或者 哈希操作,每个都会使用这个参数声明的这么多内存,然后才会开始求 助于临时文件。同样,好几个正在运行的会话可能会同时进行排序操作。 因此使用的总内存可能是 work_mem 的好几倍。ORDER BY, DISTINCT 和mergejoin都要用到排序操作,而哈希操作在哈希连接、哈希聚集和以 哈希为基础的 IN 子查询处理中都会用到。该参数是会话级参数。
maintenance_work_mem=1GB
#声明在维护性操作(比如 VACUUM, CREATE INDEX, ALTER TABLE ADD FOREIGN KEY 等)中使用的最大的内存数。以kB为单位,缺省是 16384 (16MB)。 因为在一个数据库会话里,任意时刻只有一个这样的操 作可以执行,并且一个数据库安装通常不会有太多这样的工作并发执行, 把这个数值设置得比 work_mem 更大是安全的。更大的设置可以改进清 理和恢复数据的速度。推荐每GB的物理内存设置50MB。
effective_cache_size=RAM*0.5GB ——RAM指内存(free -g)
#优化器假设一个查询可以使用的最大内存(包括kingbase使用的和操作 系统缓存),和shared_buffer等内存无关,只是给优化器生成计划使用 的一个假设值。
log_rotation_size=100MB
#单个日志文件的大小,如果时间没有超过log_rotation_age,一个日志文件 最大只能到100M,否则将新生成一个日志文件。
log_checkpoints=on
#当数据库进行一项大更新操作时,如果参数设置不当,会在日志里留下 大量的告警信息,频繁的做checkpoint会导致系统变慢,不用设置都会 有。但是不会记录系统正常的checkpoint,如果想看系统一天之类发生 了多少次checkpoint,以及每次checkpoint的一些详细信息,比如 buffer,sync等,就可以通过设置log_checkpoints,该参数默认值是off。
log_connections=on
#是否记录用户连接信息
log_disconnections=on
#是否记录用户连接断开信息
log_lock_waits=on
#当一个会话被锁的等待时间超过deadlock_timeout是否产生一个日志信 息。在判断一个锁等待是否会影响性能时是有用的,缺省是off。
log_autovacuum_min_duration=0
#这个参数用来记录 autovacuum 的执行时间,当 autovaccum 的执行 时间超过 log_autovacuum_min_duration参数设置时,则autovacuum 信息记录到日志里,默认为 "-1", 表示不记录。
log_temp_files=0
#当SQL有排序、临时查询结果或hash时,会生成临时文件。这件临时文 件有时会比较大,需要监控,可以设置参数log_temp_files为一个整数值, 当临时大于这个值时,则把临时文件的信息打印到日志中。
log_statement='ddl'
# none, ddl, mod, all ---- 控制记录哪些SQL语句。none不记录,ddl记录 所有数据定义命令,比如CREATE,ALTER,和DROP 语句。mod记录所 有ddl语句,加上数据修改语句INSERT,UPDATE等,all记录所有执行的语 句,将此配置设置为all可跟踪整个数据库执行的SQL语句。
设置日志记录内容--log_statement:none, ddl, mod, and all 。
None表示不记录。
ddl记录所有数据定义命令,比如CREATE,ALTER,和DROP语句。
mod记录所有ddl语句,加上数据修改语句INSERT,UPDATE等。
all记录所有执行的语句,将此配置设置为all可跟踪整个数据库执行的SQL语句,但会对数据库性能产生较大影响,生产环境不建议配置此值。
log_min_duration_statement=1000
#单位:毫秒,可以设置一定时长的参数(log_min_duration_statement), 来记录超过该时长的所有SQL,对找出当前数据库的慢查询很有效。-1 表示不记录,0将记录所有SQL语句和它们的耗时,>0只记录那些耗时超 过(或等于)这个值(ms)的SQL语句。 比如log_min_duration_statement = 2000,记录超过2秒的SQL,改完需要reload。
lc_messages='C'
#设置信息显示的语言。可接受的值是操作系统相关的。如果这个变量设 置为空字符串,那么其值将以一种系统相关的方式从服务器的执行环境 中继承。缺省值为zh_CN.UTF-8。有效值可以有两种形式:'C'或语言. 编码格式,如:zh_CN.UTF8、zh_CN.GB18030等,对于后一种形式必须 指定编码。
log_line_prefix='%t [%p]: [%l-1] user=%u,db=%d,app=%a,client=%h'
#这是一个 printf 风格的字符串,用以设置在日志的每行开头输出内容。 缺省是空字符串。日志输出前缀,可根据自己需求需要设置(能够记录时间, 用户名称,数据库名称,客户端IP和端口,方便定位问题)
char_default_type='char'
#定长字符串,如果显式指定了 CHAR,则以字符为单位;如果显式指 定了 BYTE,则以字节为单位;如果没有显式指定,则以系统参数 char_default_type 为准,若系统参数 char_default_type 为 CHAR,则以 字符为单位,否则以字节为单位。n缺省为1。
max_locks_per_transaction=1024
#设置每个事务最多可以持有的锁的个数。如果应用可能在一个事务里面 修改很多不同的表,可能需要提高这个数值。缺省值为64,对于大多数 应用已经足够。这个参数只能在服务器启动的时候设置。
ora_date_style=on
#默认为off,日历日期形式为年,月,日
#值为on时,日历日期形式为(年,月,日,时,分,秒)。
ora_format_style=on
#开关开启时,格式化输出(to_char,to_timestamp...)兼容oracle,默认 值为off。
ora_func_style=on
#设置兼容Oracle函数行为,默认为true启用状态。当启用 (true) ora_func_style时, sequence.nextval兼容Oracle的Sequence伪列行 为。 比如,SELECT SEQ.NEXTVAL AS A, SEQ.NEXTVAL AS B FROM DUAL,结果A B 值相 同。 ltrim/rtrim/btrim兼容Oracle对应函数行为, 最长的只包含characters只能是 一个字 符。 textcat兼容Oracle字符 串连接NULL时候,结果为字符串本身。 regexp_replace兼容Oracle 该函数行为,regexp_replace参数中有NULL出现,当做空串 处理。 当 关闭(false)ora_func_style时,上述函数表现为原有形式。
ora_input_emptystr_isnull=on
#设置空串输入的输入形式(空串或NULL)及部分函数返回值空串输出 形式(空串或 NULL),默认为true启用状态。当启用(true) ora_input_emptystr_isnull时, 既可 以输入空串有可以输入为NULL, 那么空串将变成NULL的形式输入。比如,我们向没有空值限制列加入 数据空串数据时候, 实际空串会被当做NULL存入该列中。 COMMENT 注释对象信息时候,注释信息(text)为空串时候,空串作为NULL处
理,就表示删除对象信息。 regexp_replace和ltrim/rtrim/btrim返回 值为空串时候,返回NULL。 当关闭(false)ora_input_emptystr_isnull 时,输入空串依旧作为空串处 理;上述函数返回值为空串时候,依旧返 回空串。
ora_numop_style=on
兼容oracle number类型数据的operator
idle_in_transaction_session_timeout(单位ms)和client_idle_timeout(单位s)这个参数有啥区别
一个是针对idle会话的(空闲会话),一个针对idle_in_transaction的(事务中空闲),这个就相当于 begin; 然后不操作的空闲时间
test=# select * from sys_settings where name ='client_idle_timeout' or name ='idle_in_transaction_session_timeout';
-[ RECORD 1 ]---+-----------------------------------------------------------------
name | client_idle_timeout
setting | 0
unit | s
category | Client Connection Defaults / Statement Behavior
short_desc | Sets the maximum allowed duration of any client idling interval.
extra_desc | A value of 0 turns off the timeout.
context | user
vartype | integer
source | default
min_val | 0
max_val | 1800
enumvals |
boot_val | 0
reset_val | 0
sourcefile |
sourceline |
pending_restart | f
-[ RECORD 2 ]---+-----------------------------------------------------------------
name | idle_in_transaction_session_timeout
setting | 0
unit | ms
category | Client Connection Defaults / Statement Behavior
short_desc | Sets the maximum allowed duration of any idling transaction.
extra_desc | A value of 0 turns off the timeout.
context | user
vartype | integer
source | default
min_val | 0
max_val | 2147483647
enumvals |
boot_val | 0
reset_val | 0
sourcefile |
sourceline |
pending_restart | f