Я запускаю этот сервер для целей интеллектуального анализа данных. Он выполняет несколько вычислительных приложений для интеллектуального анализа данных параллельно и делает одновременный доступ к серверу MySQL.mysql - Очень медленный ответ даже при большом количестве доступного соединения
Вот конфигурации.
конфигурации сервера: 8 ядро Intel Xeon, 16gb RAM, GB SAS диск 500
MySQL my.cnf
[client]
#password = [your_password]
port = 3306
socket = /var/lib/mysql/mysql.sock
[mysqld]
# generic configuration options
port = 3306
socket = /var/lib/mysql/mysql.sock
datadir = /database/mysql
log_bin = OFF
expire-logs-days = 3
pid-file = /database/mysql/localhost.localdomain.pid
back_log = 50
max_connections = 3000
max_connect_errors = 100
table_open_cache = 2048
max_allowed_packet = 16M
binlog_cache_size = 1M
max_heap_table_size = 64M
read_buffer_size = 128M
read_rnd_buffer_size = 32M
sort_buffer_size = 32M
join_buffer_size = 8M
thread_cache_size = 8
thread_concurrency = 4
query_cache_size = 64M
query_cache_limit = 2M
ft_min_word_len = 4
default-storage-engine = innodb
thread_stack = 192K
transaction_isolation = REPEATABLE-READ
tmp_table_size = 64M
log-bin = mysql-bin
binlog_format = mixed
server-id = 1
key_buffer_size = 32M
bulk_insert_buffer_size = 64M
myisam_sort_buffer_size = 128M
myisam_max_sort_file_size = 10G
myisam_repair_threads = 1
myisam_recover
innodb_additional_mem_pool_size = 32M
innodb_buffer_pool_size = 4G
innodb_data_file_path = ibdata1:10M:autoextend
#innodb_data_home_dir = <directory>
innodb_write_io_threads = 8
innodb_read_io_threads = 8
#innodb_force_recovery = 6
innodb_thread_concurrency = 0
innodb_flush_log_at_trx_commit= 2
#innodb_fast_shutdown
innodb_log_buffer_size = 8M
innodb_log_file_size = 1G
innodb_log_files_in_group = 3
#innodb_log_group_home_dir
innodb_max_dirty_pages_pct = 90
#innodb_flush_method = O_DSYNC
innodb_lock_wait_timeout = 120
[mysqldump
quick
max_allowed_packet = 16M
[mysql]
auto-rehash
[myisamchk]
key_buffer_size = 512M
sort_buffer_size = 512M
read_buffer = 8M
write_buffer = 8M
[mysqlhotcopy]
interactive-timeout
[mysqld_safe]
open-files-limit = 8192
Есть только 2 пользователей, которые имеют доступ к этому серверу, который включает меня. В час пик я получаю это
mysql > show processlist
...
120 rows in set
Это показывает, что около 120 соединений устанавливаются с сервером MySQL в часы пик вычислений. MySQL потребляет около 9,5 гб памяти и использует 98-99% процессор, с которым я все еще могу жить. Но за это время сборка front-end-сайта с php/javascript занимает около 1 - 2 минут, потому что mysql очень медленно реагирует в течение этих часов. Обычно это занимает от 890 до 4 секунд.
Я хочу знать, как оптимизировать конфигурацию сервера mysql. В настоящее время, как видно из опубликованного my.cnf, буферный пул имеет 4 ГБ, а максимальное количество соединений - 3000. Все таблицы Innodb с соответствующими индексами, но в моем случае безопасность транзакций не является проблемой, основной и единственной проблемой является производительность. Приложения для интеллектуального анализа данных используют MySQL C API Connector, и каждый из них имеет около 24 параллельных потоков, которые равны 24 одновременным подключениям к MySQL
Как я могу дополнительно оптимизировать конфигурацию сервера mysql, чтобы получить разумное время отклика около 10 - 15 секунд для доступа к передней панели. Пожалуйста, дайте мне знать, есть ли способ оптимизировать это дальше.
Да, этот сервер, который я использую, полностью посвящен этим целям интеллектуального анализа данных. Передняя часть показывает только таблицы, извлеченные из базы данных, в простой пользовательский интерфейс. И только 2 пользовательских доступа к этому интерфейсу, который включает меня, и больше не будет пользователей как своего частного сервера. Но можете ли вы уточнить или предоставить любую ссылку, которая показывает, как «использовать транзакции для объединения нескольких небольших запросов в блоки». В настоящее время целостность данных имеет меньший приоритет, чем производительность вычислений и производительность MySQL, esp для SELECT и INSERT. – Maxx
Btw 98% запросов, отправленных на сервер, являются простыми SELECT и INSERT. В некоторых из наиболее часто используемых запросов используются вложенные SELECTS 1 уровня, а те, которые используют JOINS, выполняются только один раз за цикл, поэтому его, как JOIN, выполняется только 1 раз на 5000 запросов. – Maxx
Еще одна вещь, которую я должен упомянуть, - это около 12 баз данных. 9 из них имеют более 5 - 10 миллионов столов. Каждая таблица предназначена для определенной функции продукта, которая классифицируется базами данных. – Maxx