最近在整理POSTGRESQL MYSQL MONGODB REDIS 的标准化模板配置参数,当然这里面还包含 LINUX 的一些基本配置. 相关的整理的工作是我的三个 DBA 操作的, 针对目前的参数进行了相关的整理和重新设定. 昨天有人问我要,这边进贴出来,如果大家有什么问题 ,告诉我们, 大家一起进步.
1 POSTGRESQL 12.2 配置文件以及释义
listen_addresses = '0.0.0.0' #what IP address(es) to listen on;
port = 5432
#端口
max_connections = 500 #最大连接数
superuser_reserved_connections = 3 #超级用户就可以建立3个连接。当然,普通用户连接数会减少3个。
authentication_timeout = 1min
#完成服务器认证的最长时间,如果在这个时间内没有完成认证,服务器将关闭连接。
password_encryption = md5
#密码加密MD5格式
shared_buffers = 12000MB
#如果您有一个具有1GB或更大RAM的专用数据库服务器,则shared_buffers的合理起始值是系统内存的25%。
huge_pages = try
#控制是否为主要共享内存区域请求大页面。
temp_buffers = 8MB
#默认值为八兆字节(8MB)。
work_mem = 6MB #默认值为4兆字节(4MB)。
maintenance_work_mem = 256MB #默认值为4兆字节(4MB#开始将数据写入临时文件之前,将允许每个操作使用此值指定的内存量。同样,几个正在运行的会话可能会同时进行此类操作。因此,使用的总内存可能是work_mem的许多倍;选择值时必须牢记这一事实。排序操作用于ORDER BY,DISTINCT和合并联接。哈希表用于IN子查询的哈希联接,基于哈希的聚合和基于哈希的处理。
dynamic_shared_memory_type = posix #指定服务器应使用的动态共享内存实现。可能的值为posix(用于使用shm_open分配的POSIX共享内存)
full_page_writes = on
#启用此参数后,PostgreSQL服务器会在检查点之后对该页面的首次修改期间将每个磁盘页面的全部内容写入WAL。
wal_compression = off #如果启用此参数,则在启用full_page_writes或在基本备份期间,PostgreSQL服务器将压缩写入WAL的整页映像,默认值为关闭。
wal_log_hints = on
#启用此参数后,PostgreSQL服务器会在检查点之后对该页面的第一次修改期间将每个磁盘页面的全部内容写入WAL,即使是非关键性的所谓提示位修改也是如此。
max_wal_size = 4GB
#使WAL在自动检查点期间增长的最大大小。这是一个软限制。在特殊情况下,例如重负载,失败的archive_command或较高的wal_keep_segments设置,WAL大小可能会超过max_wal_size。如果指定的该值不带单位,则以兆字节为单位。默认值为1 GB。
min_wal_size = 320MB
#要WAL磁盘使用率保持低于此设置,旧的WAL文件将始终在检查点被回收以备将来使用,而不是被删除。这可以用来确保保留足够的WAL空间来处理WAL使用率的峰值,例如在运行大型批处理作业时。如果指定的该值不带单位,则以兆字节为单位。默认值为80 MB。
archive_mode = on
#启用archive_mode时,通过设置archive_command将完整的WAL段发送到归档存储。
archive_command = 'test ! -f /pgdata/archive/%f && cp %p /pgdata/archive/%f'
#执行本地shell命令以归档完整的WAL文件段。字符串中的任何%p都将替换为要存档的文件的路径名,而任何%f都将仅替换为文件名。(路径名称是相对于服务器的工作目录,即群集的数据目录。)使用%%在命令中嵌入实际的%字符。重要的是,只有成功执行命令,才能返回零退出状态。
min_parallel_table_scan_size = 16MB #设置为了考虑并行扫描而必须扫描的最小表数据量。对于并行顺序扫描,扫描的表数据量始终等于表的大小,但是当使用索引时,扫描的表数据量通常会更少。默认值为8兆字节(8MB)。
min_parallel_index_scan_size = 1024kB #设置为了考虑并行扫描而必须扫描的最小索引数据量。请注意,并行索引扫描通常不会涉及整个索引。计划程序认为相关扫描实际上会触及的页数。默认值为512 KB(512kB)。
log_destination = 'stderr' #PostgreSQL支持几种记录服务器消息的方法,包括stderr,csvlog和syslog。
logging_collector = on
#此参数启用日志收集器,这是一个后台进程,用于捕获发送到stderr的日志消息并将它们重定向到日志文件中。
log_directory = '/pgdata/errorlog'
#启用logging_collector时,此参数确定将在其中创建日志文件的目录。可以将其指定为绝对路径,也可以相对于集群数据目录指定。
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log' #log文件的输出格式
log_file_mode = 0600 #log文件的权限
log_truncate_on_rotation = on #启用logging_collector时,此参数将导致PostgreSQL截断(覆盖)而不是附加到任何同名的现有日志文件中。但是,截断仅在由于基于时间的旋转而打开新文件时发生,而不是在服务器启动或基于大小的旋转过程中发生。
log_rotation_age = 1d #启用logging_collector时,此参数确定使用单个日志文件的最长时间,之后将创建新的日志文件。如果指定的该值不带单位,则以分钟为单位。默认值为24小时。
log_rotation_size = 10MB #启用logging_collector时,此参数确定单个日志文件的最大大小。在将大量数据发送到日志文件之后,将创建一个新的日志文件。如果指定的该值不带单位,则以千字节为单位。默认值为10 MB。
log_checkpoints = on
#使检查点和重新启动点记录在服务器日志中。日志消息中包含一些统计信息,包括写入的缓冲区数量和写入它们所花费的时间。此参数只能在postgresql.conf文件或服务器命令行中设置。默认为关闭。
log_connections = on
#导致记录到服务器的每个尝试连接,以及成功完成客户端身份验证。只有超级用户才能在会话开始时更改此参数,并且在会话内完全不能更改。默认为关闭。
log_disconnections = on
#导致记录会话终止的连接。日志输出提供类似于log_connections的信息,以及会话的持续时间。只有超级用户才能在会话开始时更改此参数,并且在会话内完全不能更改。默认为关闭。
log_duration = on
#导致记录每个完成的语句的持续时间。
log_error_verbosity = default #控制记录在服务器日志中的每条消息的详细信息量。
log_hostname = on
#默认情况下,连接日志消息仅显示连接主机的IP地址。启用此参数也会导致记录主机名。
log_lock_waits = on
#控制当会话等待的时间超过Deadlock_timeout以获取锁时,是否生成日志消息。
log_timezone = 'PRC'
#设置用于服务器日志中写入的时间戳的时区。
track_io_timing = on
#是否收集I/O的时间信息。
autovacuum = on
#控制服务器是否应运行autovacuum启动器守护程序。默认情况下,这是打开的;
log_autovacuum_min_duration = -1
#如果自动真空执行的每个操作至少运行了指定的时间量,则将其记录下来。将此设置为零将记录所有自动真空操作。-1(默认值)禁用日志记录自动清理操作。
autovacuum_max_workers = 6
#指定可以一次运行的最大自动真空进程数(自动真空启动程序除外)。默认值为三。该参数只能在服务器启动时设置。
statement_timeout = 1000
#中止所有花费时间超过指定时间的语句。
lock_timeout = 1000
#在尝试获取表,索引,行或其他数据库对象的锁时,中止等待时间超过指定时间的任何语句。
datestyle = 'iso, mdy'
#设置日期和时间值的显示格式,以及解释不明确的日期输入值的规则。由于历史原因,此变量包含两个独立的组件:输出格式规范(ISO,Postgres,SQL或德语)和用于年/月/日排序的输入/输出规范(DMY,MDY或YMD)。
timezone = 'PRC'
#设置显示和解释时间戳的时区。内置默认值为GMT。
lc_messages = 'en_US.utf8' #设置显示消息的语言。
lc_monetary = 'en_US.utf8' #设置用于格式化货币金额的语言环境,例如,使用to_char系列函数。
lc_numeric = 'en_US.utf8' #设置用于格式化数字的语言环境,例如与to_char系列函数一起使用。
lc_time = 'en_US.utf8'
#设置用于格式化日期和时间的语言环境,例如to_char系列函数。
default_text_search_config = 'pg_catalog.english'
#选择文本搜索功能的那些文本搜索功能变体使用的文本搜索配置,这些变体没有指定配置的显式参数。
deadlock_timeout = 1s
#这是在检查是否存在死锁条件之前等待锁的时间。
autovacuum_work_mem = -1 #如果这个参数是开启的,PostgreSQL服务器将尝试通过发出fsync()系统调用或各种等效方法(参见wal_sync_method)来确保更新被物理地写到磁盘。
fsync = on
#如果这个参数是开启的,PostgreSQL服务器将尝试通过发出fsync()系统调用或各种等效方法(参见wal_sync_method)来确保更新被物理地写到磁盘。这可以确保在操作系统或硬件崩溃后,数据库集群能够恢复到一致的状态。
hot_standby = on
#只对slaver有效,以便master倒掉时,slaver可以热切换到master。
log_min_duration_statement = -1 #如果语句至少运行了指定的时间,则记录每个完成语句的持续时间。如果指定此值时没有使用单位,则以毫秒为单位。将此设置为0将打印所有语句的持续时间。- 1(默认值)禁止记录语句的持续时间。
log_replication_commands = on #将每个复制命令记录在服务器日志中。
log_statement = 'ddl'
#控制记录哪些SQL语句。有效值为none (off)、ddl、mod和all(所有语句)。
max_logical_replication_workers = 4 #指定逻辑复制进程的最大数量。
max_parallel_maintenance_workers = 4
#设置单个实用程序命令可以启动的并行工作程序的最大数量。
max_parallel_workers_per_gather = 4
#设置单个收集或收集合并节点可启动的工作程序的最大数量。
max_sync_workers_per_subscription = 2 #最大同步工作器数。此参数控制在订阅初始化期间或添加新表时初始数据复制的并行度。
max_wal_senders = 10
#从备用服务器或流基础备份客户端的最大并发连接数(即同时运行WAL sender进程的最大数量)。默认值为10。
max_worker_processes = 8
#设置系统支持的最大后台进程数。
parallel_leader_participation = on
#允许主导进程在收集和收集合并节点下执行查询计划,而不是等待工作进程。
shared_preload_libraries = 'repmgr,pg_stat_statements,auto_explain'
#这个变量指定在服务器启动时预加载的一个或多个共享库。
synchronous_commit = on
#指定在数据库服务器返回一个“成功”指示给客户端之前,必须完成多少WAL处理。
temp_file_limit = -1
#指定进程可用于临时文件的最大磁盘空间,例如排序和哈希临时文件,或保存游标的存储文件。
wal_buffers = -1
#用于尚未写入磁盘的WAL数据的共享内存量。
wal_keep_segments = 10
#指定备用服务器需要获取它们以进行流复制时,保留在pg_wal目录中的最小过去日志文件段的数量。每个段通常为16兆字节。
wal_level = logical #wal_level确定将多少信息写入WAL。
wal_sender_timeout = 60s
#终止不活动时间超过此时间的复制连接。
wal_sync_method = fsync
#如果可用,open_*选项也使用O_DIRECT。可能有必要更改此设置或系统配置的其他方面,以创建崩溃安全配置或实现最佳性能。
max_replication_slots = 10
#主要是提供了一种自动化的方法来确保主控机在所有的后备机收到 WAL 段 之前不会移除它们,并且主控机也不会移除可能导致恢复冲突的行,即使后备机断开也是如此。
MYSQL 8 配置文件 (尚未使用密码插件)
## mysql 8 my.cnf部分参数说明
注:“#”参数为准备开启参数,因有主从区别暂时注释
```bash
sql_mode = "STRICT_TRANS_TABLES,STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,TRADITIONAL,NO_ENGINE_SUBSTITUTION,ONLY_FULL_GROUP_BY"
autocommit = 1 #自动提交模式
character_set_server=utf8mb4
transaction_isolation = READ-COMMITTED
explicit_defaults_for_timestamp = 1
event_scheduler = 0 #事件调度线程关闭
max_allowed_packet = 16777216 #消息大小上限(16M)
lower_case_table_names = 1 #=1 表名以小写形式存储,比较不区分大小写
# connection #
interactive_timeout = 1800 #服务器在关闭交互式连接前等待秒数
wait_timeout = 1800 #服务器在关闭非交互式连接之前等待活动的秒数。
lock_wait_timeout = 180 #尝试获取元数据锁定的超时秒数
max_connections = 2000 #允许的最大同时客户端连接数
max_connect_errors = 1000000 #允许同一主机连接请求失败最大值(超过之后mysql会阻止这台主机后续所有请求)
# table cache performance settings
table_open_cache = 4096 #所有线程打开表数
table_definition_cache = 4096 #定义在高速缓冲中存储的表定义数量,
#定义一次可打开的innodb文件数(每个表)的软限制(与innodb_open_files取最大值)
table_open_cache_instances = 64 #打开表缓存实例的数量
#每个表缓存实例大小=table_open_cache /table_open_cache_instances
# session memory settings #
read_buffer_size = 1M #server层顺序数据读缓存
read_rnd_buffer_size = 1M #server层非顺序数据读缓存
sort_buffer_size = 1M #排序缓存(建议小于2M,超过可能会显著减慢内存分配)
tmp_table_size = 2M #内部内存临时表最大大小(非memory表)
#与max_heap_table_size取最小值
#如执行较多高级group by查询且内存充足可增加该值
join_buffer_size = 2M #全表扫描最小缓冲区大小(全局值应小于匹配行缓冲)
thread_cache_size = 64 #缓存线程数(根据每秒连接数调整)
# innodb settings #
innodb_page_size = 16384 #表空间页面大小。
#接近存储设备块大小可最大程度减少重写到磁盘的未更改数据量
innodb_buffer_pool_size = 28G #缓冲池大小:系统内存的70%(系统内存为40G)
innodb_buffer_pool_instances = 4 #缓冲池划分区域数,每个缓冲实例至少1G
innodb_lru_scan_depth = 4096 #脏页刷新参数
innodb_io_capacity = 1500 #InnoDB后台任务IOPS
innodb_io_capacity_max = 2000 #InnoDB后台任务IOPS最大值
innodb_flush_method = O_DIRECT #数据刷新方式
innodb_log_file_size = 1147483648 #定义日志大小(1G)
innodb_log_files_in_group = 2 #日志文件数
innodb_log_buffer_size = 16777216 #日志缓冲大小(16MB)
innodb_purge_threads = 4 #清除线程数
innodb_thread_concurrency = 64 #innodb内部允许的最大线程数
innodb_sort_buffer_size = 67108864 #创建索引时排序缓冲区大小(64MB)
innodb_write_io_threads = 16 #innodb写线程数
innodb_read_io_threads = 16 #innodb读线程数
innodb_stats_persistent_sample_pages = 64 #采样索引页数
innodb_online_alter_log_max_size=1G #在线DDL操作临时日志文件大小上限(超过将失效回滚)
innodb_open_files=4096 #保持打开ibd文件最大值(与table_open_cache取最高)
innodb_buffer_pool_dump_pct = 40 #指定每个缓冲池要读取和转储的最近使用页面的百分比
innodb_page_cleaners = 16 #从缓冲池实例中刷新脏页的线程数
innodb_undo_tablespaces = 3 #定义undo表空间数
innodb_purge_rseg_truncate_frequency = 128 #清除释放回滚段频率(128)
innodb_numa_interleave=1 #启用NUMA交错内存策略以分配InnoDB缓冲池
large_pages=1 #启用大页内存
#deadlock
innodb_deadlock_detect=0 #死锁检测机制关闭
innodb_rollback_on_timeout =1 #开启事务回滚
innodb_lock_wait_timeout=1 #InnoDB事务在放弃之前等待行锁定的秒数(行锁)
# semi sync replication settings #
#plugin_load = "rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
#rpl_semi_sync_master_enabled=1 #主库开启半同步复制
#rpl_semi_sync_master_timeout=3000 #主库等待从库时间(ms)(超时切换异步复制)
#rpl_semi_sync_slave_enabled=1 #从库开启半同步复制
#rpl_semi_sync_master_wait_for_slave_count=2 #master提交后所需的应答数量
#rpl_semi_sync_master_wait_no_slave=OFF/ON #切换异步条件
# MTS replication settings #
slave-parallel-type = LOGICAL_CLOCK
slave-parallel-workers = 16
slave_preserve_commit_order=1
slave_transaction_retries=128
master_info_repository = TABLE
relay_log_info_repository = TABLE
relay_log_recovery = 1
relay_log = /mysqllog/relay.log
```
MONGODB 4.2 配置文件 (单机非复制集)
systemLog:
quiet: false
path: /mongodata/log/mongo.log
destination: file
logAppend: true
logRotate: rename
timeStampFormat: iso8601-local
component:
accessControl:
verbosity: 0
command:
verbosity: 0
control:
verbosity: 0
ftdc:
verbosity: 1
geo:
verbosity: 0
index:
verbosity: 1
network:
verbosity: 1
query:
verbosity: 0
replication:
verbosity: 0
sharding:
verbosity: 0
storage:
verbosity: 1
transaction:
verbosity: 0
write:
verbosity: 1
processManagement:
fork: true
pidFilePath: /mongodata/pid/mongo.pid
net:
port: 27027
maxIncomingConnections: 65536
bindIp: 0.0.0.0
# security:
# clusterAuthMode: keyFile
# keyFile: /mongodata/keyFile/repl_set.key
# authorization: enabled
storage:
dbPath: /mongodata/data
journal:
enabled: true
commitIntervalMs: 100
directoryPerDB: true
engine: wiredTiger
wiredTiger:
engineConfig:
directoryForIndexes: true
cacheSizeGB: 1
# operationProfiling:
# mode: slowOp
# replication:
# replSetName: repl
# sharding:
# clusterRole: shard
以上配置均匹配 LINUX 透明大页关闭, 大页开启的状态,并且每个数据库SWAP 的比重也都进行了调整. 这里就不在赘述(也包含,关于日志rotate的一些脚本等等)