Centos 7, WHM High Mysql и MariaDB Загрузка ЦП% 600 - PullRequest
0 голосов
/ 28 ноября 2018

У меня проблема.Мой веб-сайт очень медленно, я думаю, что это MySQL.Максимальное подключение пользователя мгновенно 100 пользователей.30-40 человек в большинстве случаев.

Мой сервер:

  • Intel Xeon E3-1230v3

  • 16 ГБ DDR3 Ram

  • 240 ГБ OCZ SSD Disk

  • Centos 7 WHM-cPanel MariaDB

...

PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
12496 mysql   20   0   14.1g   1.3g  12228 S 576.1  8.2 116:38.62 

/ usr / sbin / mysqld

/ etc / my.cnf:

port        = 1905
socket      = /var/lib/mysql/mysql.sock

# The MySQL Safe server
[mysqld_safe]
open_files_limit = 58000
# The MySQL server
[mysqld]
max_connections = 300
local-infile    = 0
socket      = /var/lib/mysql/mysql.sock
skip-external-locking
key_buffer_size = 1024M
table_open_cache = 4096
open_files_limit = 40960
max_allowed_packet=1073741824
sort_buffer_size = 4M
read_buffer_size = 4M
join_buffer_size = 4M
sort_buffer_size = 4M
read_rnd_buffer_size = 128M
myisam_sort_buffer_size = 128M
thread_cache_size = 16
#query_cache_size= 32M
tmp_table_size = 64M
max_heap_table_size = 64M

#table_cache    = 1024

#Slowly log
slow-query-log = 1
slow-query-log-file = /var/lib/mysql/mysql-slow.log
long_query_time = 1

# Uncomment the following if you are using InnoDB tables
innodb_file_per_table= 1
#innodb_data_home_dir = /var/lib/mysql
#innodb_data_file_path = ibdata1:50M:autoextend
#innodb_log_group_home_dir = /var/lib/mysql
# You can set .._buffer_pool_size up to 50 - 80 %
# of RAM but beware of setting memory usage too high
innodb_buffer_pool_size = 8096M
#innodb_additional_mem_pool_size = 64M
# Set .._log_file_size to 25 % of buffer pool size
#innodb_log_file_size = 64M
#innodb_log_buffer_size = 8M
#innodb_flush_log_at_trx_commit = 1
#innodb_lock_wait_timeout = 50

# Connection Settings
wait_timeout = 60
skip-external-locking



[mysqldump]
quick
max_allowed_packet = 64M

[mysql]
no-auto-rehash
# Remove the next comment character if you are not familiar with SQL
#safe-updates

[myisamchk]
key_buffer_size = 512M
sort_buffer_size = 256M
read_buffer = 8M
write_buffer = 8M
# Query Cache Settings
query_cache_type = 1
query_cache_limit = 256K
query_cache_min_res_unit = 2k
query_cache_size = 80M
skip-external-locking

[mysqlhotcopy]
interactive-timeout

Как я могу решить эту проблему?

Спасибо.

Ответы [ 3 ]

0 голосов
/ 02 декабря 2018

Войдите в WHM с привилегированным пользователем. Из Multi PHP Manager переключите веб-сайт на PHP 7.1, включите php-fpm для этого конкретного веб-сайта.

Во-вторых, скачайте скрипт настройки MySQL, который поможет вам настроитьНастройки /etc/my.cnf для лучшей производительности mysql.

если все не работает даже после всех этих изменений, вам придется оптимизировать базу данных mysql.

0 голосов
/ 05 декабря 2018

скорость в секунду = RPS. Рекомендации по улучшению производительности в разделе my.cnf [mysqld],

read_rnd_buffer_size=256K  # from 128M to reduce handler_read_rnd_next RPS from 6 million +
innodb_io_capacity=1900  # from 200 to enable more of your SSD io capacity
thread_cache_size=100  # from 16 to reduce threads_created count of 24,136 in 8 hrs
aria_pagecache_buffer_size=64M  # from 128M to conserve RAM, only 2 blocks used in 8 hrs
key_buffer_size=128M  # from 1G to conserve RAM, 15M used was the High Water Mark

Арас и Фуркан, если у вас еще нет созданных индексов, предложенный РикомДжеймс, пожалуйста, оставьте комментарий, указывающий, что вам нужна помощь с этим запросом для повышения эффективности управления индексами.

0 голосов
/ 30 ноября 2018

Итог: Добавление нескольких индексов очень поможет:

INDEX(islemkey)
INDEX(site, durum, islem_baslangic)
INDEX(durum, site, site_durum, id)

Подробности

UPDATE odemeler SET step='odeme_kontrol' WHERE islemkey = '78TNgyacgjwt'

Вам нужно INDEX(islemkey) on odemeler.

`expire` varchar(255) DEFAULT NULL,
AND islem_baslangic LIKE '2018-11-29%'

Если expire является DATE или DATETIME, то оно должно быть объявлено таковым.Если это какой-то нестандартный формат даты, то его нужно конвертировать.То же самое для islem_baslangic и любых других столбцов, которые содержат даты.

SELECT * FROM odemeler WHERE site = '71' AND durum = '1'

odemeler нуждается в этом составном INDEX(site, durum);При желании они могут быть перечислены в обратном порядке.

SELECT id,tcno, miktar,durum,islem_baslangic,site,site_durum
    FROM odemeler
    WHERE site = '74' AND durum = '1' AND site_durum = '0'
    ORDER BY id DESC LIMIT 20

Требуется

INDEX(site, durum, site_durum,  -- in any order
      id)   -- last

Причина

Без используемого индекса, большая частьзапросы, отображаемые в PROCESSLIST, должны сканировать всю таблицу.Это занимает много процессора.И это замедляет каждый запрос.И тогда запросы складываются.(Это было много запросов в PROCESSLIST сразу.)

При использовании используемых индексов каждый запрос будет приходить и идти намного быстрее и потреблять гораздо меньше ресурсов ЦП.Это цель индексов!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...