这篇文章主要介绍了一种数据库系统中的参数查看和修改方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
1.查看参数文件的位置
使用显示命令查看,比较常用的显示配置文件。此还可以查看pg _设置数据字典。
test=# show配置文件
配置文件
-
/data/pgdata/postgresql.conf
(1行)
测试=#显示hba _文件
测试-#;
hba _文件
-
/data/pgdata/pg_hba.conf
(1行)
测试=# show ident _ file
识别文件
-
/data/pgdata/pg_ident.conf
2.查看当前会话的参数值
可以使用显示命令或者查看pg _设置字典。
使用全部显示可以查看全部的参数值。显示参数名查看指定参数
test=#显示全部
- - -
allow_system_table_mods | off |允许修改系统表结构。
应用程序名称| psql |设置要在统计和日志中报告的应用程序名称。
存档命令|测试!-f/data/archive/% f CP % p/data/archive/% f |设置将被调用来存档塞拉利昂文件的壳命令。
存档模式|开启|允许使用存档命令归档塞拉利昂文件。
存档超时| 0 |如果新文件在普通秒内未启动,则强制切换到下一个塞拉利昂文件。
array_nulls | on |允许在数组中输入空元素。
.
测试=# show work _ mem
工作记忆
-
4MB
(1行)
测试=# x
扩展显示已打开。
test=# select * from pg _ settings where name in( work _ mem )
测试-#;
-[记录1 ] - -
名称|工作记忆
设置| 4096
单位| kB
类别|资源使用/内存
肖特_desc |设置用于查询工作区的最大内存。
额外_desc |在切换到临时磁盘文件之前,每个内部排序操作和哈希表都可以使用这么多内存。
上下文|用户
变量类型|整数
源|默认
最小值| 64
max_val | 2147483647
enumvals |
boot_val | 4096
重置值| 4096
源文件|
sourceline |
挂起_重新启动| f
3.修改pg的参数值
1.全局修改pg的参数.
有些参数只有当程序制导服务重启的时候才生效,典型的例子就是共享缓冲区,定义了共享内存的大小。
许多参数在程序制导服务运行的时候就能修改。再更改之后像服务器执行一个再装操作,强制程序制导重新读取postgresql.conf,因此你只需要编辑postgresql.conf文件,再执行pg_ctl重新加载即可。对于需要重启的,在修改完一种数据库系统后需要执行pg_ctl重启
对于9.5以后的版本,可以通过查看pg _文件_设置查看你设置的参数是否生效。例如如果你设置了一个参数需要重启数据库才能生效或者设置错误,那么在此字典中会出现报错。
测试=# select *从pg _文件_设置其中错误不为空
源文件|源代码行|序列号|名称|设置|应用|错误
- - - - - - -
/data/pg data/PostgreSQL。自动。会议| 4 | 22 |最大连接数| 10000 | f |无法应用设置
(1行)
对于9.4以后的版本,您还可以使用alter system命令来修改参数。使用alter system命令会修改postgresql.auto.conf文件而不是postgresql.conf,这样可以很好地保护postgresql.conf文件。添加了很多alter system命令后,你搞得一塌糊涂,那么你只需要删除postgresql.auto.conf,重新加载即可。
test=# show work _ mem
工作记忆
-
4MB
(1行)
test=# alter system set work _ mem= 8MB ;
改变系统
test=# show work _ mem
工作记忆
-
4MB
(1行)
检查postgresql.auto.conf:
[postgres @ PostgreSQL 1 pg data]$ cat PostgreSQL . auto . conf
#不要手动编辑此文件!
#它将被ALTER SYSTEM命令覆盖。
work_mem=8MB
使用pg_ctl load重新加载配置文件,然后检查参数值:
test=# show work _ mem
工作记忆
-
8MB
(1行)
2.直接使用set命令,在会话层修改,修改之后将被用于未来的每一个事务,只对当前会话有效:
测试=#
test=# set work _ mem= 16MB
设置
test=# show work _ mem
工作记忆
-
16MB
(1行)
我们再打开一个会话,检查work_mem参数,可以发现work_mem还是4MB。
postgres=# show work _ mem
工作记忆
-
4MB
(1行)
3.set命令后添加 local关键字, 只在当前事务中修改,只在当前事务内有效:
test=# show work _ mem
工作记忆
-
16MB
(1行)
test=# begin
开始
test=# set local work _ mem= 8MB
设置
test=# show work _ mem
工作记忆
-
8MB
(1行)
test=# commit
犯罪
test=# show work _ mem
工作记忆
-
16MB
4.使用 reset恢复参数的默认值
pg_settings字典的reset_val字段指示如果使用reset,该参数的默认值是什么。
使用“重置参数名”恢复参数的默认值,使用“全部重置”恢复所有参数值。
test=# show work _ mem
工作记忆
-
16MB
(1行)
test=# reset work _ mem
重置
test=# show work _ mem
工作记忆
-
4MB
(1行)
test=# reset all
重置
5.为特定的用户组设置参数
一.为特定的数据库里的所有的用户设置参数,例如为test数据库所有的连接设置work_mem为16MB:
test=# alter database测试集work _ mem= 16MB
改变数据库
二.为数据库中的某个特定用户设置参数.例如为brent用户,设置work_mem为2MB:
postgres=# alter role Brent set work _ mem= 2MB ;
改变角色
经过测试发现,如果你为数据库和用户都设置了特定的参数,那么以用户为准。例如,如果我用brent用户连接到测试数据库,那么我的work_mem应该是2MB:
postgres=# c测试布伦特
您现在以用户“brent”的身份连接到数据库“test”。
测试=
测试=
test=show work _ mem
工作记忆
-
2MB
三.为某个特定用户连接到特定的数据库设置参数.例如为用户brent在数据库test中设置work_mem为8MB
test=# alter role brent in database测试集work _ mem= 8MB
改变角色
以上三个设置优先级递增,也就是说,如果设置了1、2、3,则以第三个为准,如果设置了1、2,则以2为准,以此类推。
pg的实现方法和用户连接数据库时立即手动执行set命令完全一样。
检查指定当前参数值的位置,该值可以通过查询pg _ setttings中的source字段获得。例如,如果设置了数据库级别参数,查询结果应该如下所示:
test=# select name,setting,source from pg_settings其中name= work _ mem
名称|设置|来源
- - -
work_mem | 16384 |数据库
其他的,比如第三个:
test=# c测试布伦特
您现在以用户“brent”的身份连接到数据库“test”。
test=select name,setting,source from pg_settings其中name= work _ mem
名称|设置|来源
- - -
work_mem | 8192 |数据库用户
补充:postgresql重要参数解析及优化
1,max_connections 200最大客户端连接数。后端的每个连接都会对应相应的进程,消耗一定的内存资源。如果有数千个连接,您需要使用连接池工具。
2,shared_buffers 25% of total memory用于缓存数据的数据库的内存大小。这个参数的默认值很低(考虑到不同的系统平台),需要调整。它不应该太大。很多实践表明,大于1/3的内存会降低性能。
3,effective_cache_size 50%-75% of total memory这是操作系统和PostgreSQL缓冲区缓存中预期可用内存量的指南,而不是分配!此参数仅在查询优化器选择时使用,它不是实际分配的内存。该参数越大,查询优化器就越倾向于选择索引扫描。
4,checkpoint_segments 256 checkpoint_completion_target 0.9checkponit_segments的数量是多少?Checkponit,还有一个参数checkponit_timeout,控制最长的检查点。对于写入大型数据库,该值越大越好。但是,该值越大,执行恢复所需的时间就越长。
Checkpoint_completion_target控制checkponit write的分散写入,值越大越分散。默认值0.5和0.9是一个合适的值。
5,work_mem用于排序,默认值就可以了。每个连接都会分配一定量的work_mem,也就是实际分配的内存。不要太大,默认值就够了。如果要使用的语句中有大型排序操作,可以在会话级设置这个参数,setwork _ men= 2GB ,提高执行速度。
6,maintanance_work_mem用于维护操作的内存。例如:清空、创建索引、更改表、添加外键、恢复数据库转储。在执行这些操作时,可以临时设置该值以加快执行速度。set session maintenance _ work _ mem= 2GB ;
7,random_page_cost (默认值 4) seq_page_cost(默认值 1)将优化器设置为获取随机页面的开销,与下一个顺序扫描的页面的开销1进行比较。5%.
使用raid阵列、scsi和ssd等快速存储时,可以适当降低该值。这有利于优化器的悬挂索引扫描。Ssd,可以设置为2。
8,autovacuum—维护_工作_内存1-2GB
—自动真空_最大_工作人员
如果有多个小表,则分配更多的workers和更少的mem。
大桌子,更多的人,更少的工人。
以上个人经历,希望能给大家一个参考,也希望大家多多支持我们。如有错误或不足之处,请不吝赐教。