对Zabbix数据库性能优化的几点建议

对zabbix系统的优化,主要是对Zabbix服务器的后台数据库进行优化,数据库是系统性能的主要瓶颈,针对zabbix数据库的性能优化,有以下几点建议:

1、使用专用数据服务器,配置应该较高

对于生产系统使用的ZABBIX数据库,应该考虑使用单独的一台数据库服务器,而不是和zabbix server部署在同一台服务器上。

另外,如果条件允许的话,考虑使用更快的CPU、更大的内存,更快的硬盘。例如:购买SSD硬盘、使用转速更快的硬盘、使用raid构建高性能的磁盘组等。在升级系统硬件时,可以优先考虑升级硬盘的性能,因为使用高性能的硬盘所带来的性能增益远比提升CPU频率、内存的容量所带来的性能提升效果要好的多。

2、调整数据库参数

innodb_file_per_table = 1
每个表使用独立的一个数据文件


innodb_buffer_pool_size = 4G
InnoDB 引擎建议设置的buffer poll为物理内存的70%~80%


innodb_log_file_size = 64M
zabbix数据库属于写入较多的数据库,因此将log设置大一点,可以避免MySQL持续将log文件flush到表中,不过副作用就是启动和关闭数据库时速度会变慢。


thread_cache_size = 64
线程缓存


query_cache_size = 1024M
设置查询缓冲区大小,mysql将查询结果存放在缓冲区中,今后对于同样的select语句(区分大小写),将直接从缓冲区中读取结果。


query_cache_limit = 4M
对单个查询所使用的查询缓冲区内存大小的限制,超过此大小的查询将不会缓存。


max_heap_table_size=256M
用于设置堆表的最大尺寸 tmp_table_size=256M 用于设置临时表的最大尺寸


table_cache=256
table_cache是一个非常重要的MySQL性能参数,它在5.1.3之后的版本中叫做table_open_cache。table_cache主要用于设置table高速缓存的数量。由于每个客户端连接都会至少访问一个表,因此此参数的值与max_connections有关。
当某一连接访问一个表时,MySQL会检查当前已缓存表的数量,如果该表已经在缓存中打开,则会直接访问缓存中的表以加快查询速度;如果该表未被缓存,则会将当前的表添加进缓存并进行查询。
在执行缓存操作之前,table_cache用于限制缓存表的最大数目:如果当前已经缓存的表未达到table_cache,则会将新表添加进来;若已经达到此值,MySQL将根据缓存表的最后查询时间、查询率等规则释放之前的缓存。


max_connections = 1024
数据库允许的最大连接数


innodb_flush_log_at_trx_commit = 2
= 0,每隔一秒,把事务日志缓存区的数据写到日志文件中,以及把日志文件的数据刷新到磁盘上;但每次事务提交不会有任何影响,也就是 log buffer 的刷写操作和事务提交操作没有关系。在这种情况下,MySQL性能最好,但如果 mysqld 进程崩溃,通常会导致最后 1s的日志丢失。

= 1(默认值),每事务提交的时候,把事务日志从缓存区写到日志文件中,并且刷新日志文件的数据到磁盘上。这是最安全的配置,但由于每次事务都需要进行磁盘I/O,所以也最慢。

= 2,每事务提交的时候,把事务日志从缓存区写到日志文件中。每隔一秒,刷新一次日志文件,但不一定刷新到磁盘上,而是取决于操作系统的调度;


join_buffer_size = 4M
如果应用中,很少出现join语句,则可以不用太在乎join_buffer_size参数的设置大小。如果join语句比较多的话,建议可以适当增大join_buffer_size到1MB左右,如果内存充足可以设置为2MB。
需要注意的是,每一个线程都会创建自己独立的buffer而不是整个系统共享,所以设置的值过大会造成系统内存不足。


sort_buffer_size = 4M
系统中对数据进行排序的时候用到的缓冲区,其是针对单个线程的,所以当多个线程同时进行排序的时候,系统中就会出现多个排序缓冲区。
一般可以通过增大排序缓冲区的大小来提高order by或者group by的处理性能。系统默认大小时2MB,最大限制和join
buffer一样。
对于sort_buffer_size来说,一般设置为2-4MB可以满足大多数应用的需求。如果应用中的排序都比较大,内存充足且并发量不是特别大的时候,也可以继续增大sort_buffer_size的设置。


read_buffer_size=256k
顺序读缓冲区的大小


read_rnd_buffer_size=256k
随机读缓冲区的大小

猜你喜欢

转载自blog.csdn.net/manganese55/article/details/80580599