LINUX.ORG.RU
ФорумAdmin

Dashboard

 


0

1

Первоначальные условия:

ОС RHEL 7.6 Zabbix 4.4.6. nginx и zabbix сервер на одном сервере , база данных (mariadb 10.4) на другом сервере. Оперативная память: на сервере - 16 Гб, на базе данных - 32 Гб. Количество узлов - 600. Количество элементов данных - 10000. Конфигурационный файл mariadb:

\\

path

datadir = /var/lib/mysql

tmpdir = /dev/shm

#pid-file = /var/run/mysqld/mysqld.pid #socket = /var/run/mysqld/mysqld.sock basedir = /usr lc-messages-dir = /usr/share/mysql

network

connect_timeout = 60 wait_timeout = 28800 max_connections = 3000 max_allowed_packet = 256M max_connect_errors = 1000 #interactive_timeout<–><——>= 180 #net_read_timeout<—–><——>= 900 #net_write_timeout<—-><——>= 900

limits

tmp_table_size = 1G max_heap_table_size = 1G table_open_cache = 1024

logs

general_log_file<—-><——>= /tmp/mysql.log

general_log<-><——><——>= 1

slow_query_log<><——><——>= ON log_error = /tmp/mysql-error.log slow_query_log_file = /tmp/mysql-slow.log slow_query_log = 1 long_query_time = 5

innodb

\\

################################################## ###############################

\\

#query_cache_type=1 #query_cache_size=2G query_cache_type=0 query_cache_size=0 query_cache_limit=1M innodb_buffer_pool_instances=21 join_buffer_size=512K

\\

################################################## ###############################

\
thread_cache_size=16 innodb_data_file_path = ibdata1:128M;ibdata2:128M:autoextend:max:4096M innodb_file_per_table = 1 innodb_status_file = 1 innodb_buffer_pool_size = 12G innodb_flush_method = O_DIRECT innodb_io_capacity = 2000 innodb_flush_log_at_trx_commit = 2 innodb_log_buffer_size = 16M innodb_strict_mode<—-><——>= 0

innodb_use_native_aio><——>= 0

innodb_log_file_size<–><——>= 1G innodb_buffer_pool_instances<–>= 12

performance_schema<–><——>= ON

\\

в конфигурационном файле zabbix_server изменены только значения: StartPollers=50; StartPollersUnreachable=10

В логе медленных запросов много записей вида:

\\

Time: 200304 9:12:08

User@Host: zabbix[zabbix] @ [IP]

Thread_id: 834904 Schema: zabbix QC_hit: No

Query_time: 5.098264 Lock_time: 0.000122 Rows_sent: 0 Rows_examined: 3668171

Rows_affected: 0 Bytes_sent: 331

use zabbix; SET timestamp=1583302328; SELECT p.eventid,p.objectid,p.clock,p.ns,p.name,p.severit y FROM problem p WHERE p.source=‘0’ AND p.object=‘0’ AND NOT EXISTS (SELECT NULL FROM functions f,items i,hosts_groups hgg LEFT JOIN rights r ON r.id=hgg.groupid AND r.groupid=15 WHERE p.objectid=f.triggerid AND f.itemid=i.itemid AND i.hostid=hgg.hostid GROUP BY i.hostid HAVING MAX(permission)<2 OR MIN(permission) IS NULL OR MIN(permission)=0) AND NOT EXISTS (SELECT NULL FROM event_suppress es WHERE es.eventid=p.eventid) AND (p.r_eventid IS NULL OR p.r_clock>1583302023) ORDER BY p.eventid DESC LIMIT 1001;

\\

MySQL использует только 6 Гб памяти.

Проблема:

Медленно (минуту и более) открываются дашбоды. Причем, что интересно - если пользователь имеет права на всё, т.е. админ, то его дашборд открывается за приблизительно 3 секунды, если пользователь имеет ограничения по правам, то его дашборд открывается минуту и более. Изменение параметров конфигурации MySQL в сторону увеличения параметров ничего не дало. Перевод на гораздо более мощное железо базы данных ничего не дало.

Первоначальные условия:

ОС RHEL 7.6 Zabbix 4.4.6. nginx и zabbix сервер на одном сервере , база данных (mariadb 10.4) на другом сервере. Оперативная память: на сервере - 16 Гб, на базе данных - 32 Гб. Количество узлов - 600. Количество элементов данных - 10000. Конфигурационный файл mariadb:

# path
datadir = /var/lib/mysql
# tmpdir = /dev/shm
#pid-file = /var/run/mysqld/mysqld.pid
#socket = /var/run/mysqld/mysqld.sock
basedir = /usr
lc-messages-dir = /usr/share/mysql
# network
connect_timeout = 60
wait_timeout = 28800
max_connections = 3000
max_allowed_packet = 256M
max_connect_errors = 1000
#interactive_timeout<--><------>= 180
#net_read_timeout<-----><------>= 900
#net_write_timeout<----><------>= 900
# limits
tmp_table_size = 1G
max_heap_table_size = 1G
table_open_cache = 1024
# logs
# general_log_file<----><------>= /tmp/mysql.log
# general_log<-><------><------>= 1
slow_query_log<><------><------>= ON
log_error = /tmp/mysql-error.log
slow_query_log_file = /tmp/mysql-slow.log
slow_query_log = 1
long_query_time = 5

innodb

################################################## ###############################

#query_cache_type=1
#query_cache_size=2G
query_cache_type=0
query_cache_size=0
query_cache_limit=1M
innodb_buffer_pool_instances=21
join_buffer_size=512K

################################################## ###############################

thread_cache_size=16
innodb_data_file_path = ibdata1:128M;ibdata2:128M:autoextend:max:4096M
innodb_file_per_table = 1
innodb_status_file = 1
innodb_buffer_pool_size = 12G
innodb_flush_method = O_DIRECT
innodb_io_capacity = 2000
innodb_flush_log_at_trx_commit = 2
innodb_log_buffer_size = 16M
innodb_strict_mode<----><------>= 0
# innodb_use_native_aio><------>= 0
innodb_log_file_size<--><------>= 1G
innodb_buffer_pool_instances<-->= 12
# performance_schema<--><------>= ON

в конфигурационном файле zabbix_server изменены только значения: StartPollers=50; StartPollersUnreachable=10

В логе медленных запросов много записей вида:

# Time: 200304 9:12:08
# User@Host: zabbix[zabbix] @ [IP]
# Thread_id: 834904 Schema: zabbix QC_hit: No
# Query_time: 5.098264 Lock_time: 0.000122 Rows_sent: 0 Rows_examined: 3668171
# Rows_affected: 0 Bytes_sent: 331
use zabbix;
SET timestamp=1583302328;
SELECT p.eventid,p.objectid,p.clock,p.ns,p.name,p.severit y FROM problem p WHERE p.source='0' AND p.object='0' AND NOT EXISTS (SELECT NULL FROM functions f,items i,hosts_groups hgg LEFT JOIN
rights r ON r.id=hgg.groupid AND r.groupid=15 WHERE p.objectid=f.triggerid AND f.itemid=i.itemid AND i.hostid=hgg.hostid GROUP BY i.hostid HAVING MAX(permission)<2 OR MIN(permission) IS NULL OR
MIN(permission)=0) AND NOT EXISTS (SELECT NULL FROM event_suppress es WHERE es.eventid=p.eventid) AND (p.r_eventid IS NULL OR p.r_clock>1583302023) ORDER BY p.eventid DESC LIMIT 1001;

MySQL использует только 6 Гб памяти.

Проблема:

Медленно (минуту и более) открываются дашбоды. Причем, что интересно - если пользователь имеет права на всё, т.е. админ, то его дашборд открывается за приблизительно 3 секунды, если пользователь имеет ограничения по правам, то его дашборд открывается минуту и более. Изменение параметров конфигурации MySQL в сторону увеличения параметров ничего не дало. Перевод на гораздо более мощное железо базы данных ничего не дало.

georgekup
() автор топика
Ответ на: комментарий от georgekup

Запросы вида

SELECT count(itemid) AS history_uint FROM history_uint WHERE itemid NOT IN (SELECT itemid FROM items WHERE status='0');

при почти пустой базе проходят за 12 минут

georgekup
() автор топика
Ответ на: комментарий от georgekup

1. Вы не написали что такое по вашему мнению «почти пустой базе». Сколько записей в history_uint и сколько в items?
2. Вы отключили кэширование
2.1 на не разогретой базе вполне возможно
3. За всякие where fieldname NOT IN (select... надо бить по рукам
3.1 За outer join без необходимости так же бить, долго и мучительно больно.
4. Про вложенные условия в HAVING вообще голову оторвать.

anc ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.