MySQL 100% CPU каждые 12-18 часов - PullRequest
0 голосов
/ 14 ноября 2018

Я унаследовал Windows Server (2016), и у нас есть проприетарная часть программного обеспечения, не написанная мной, которая использует базу данных MySQL.Я новичок с SQL.

Есть клиентское программное обеспечение, которое будет случайным образом подключаться к серверу в течение дня.В любом месте от 10 до 200 различных компьютеров будут подключаться к этому серверу в течение дня в зависимости от того, насколько мы заняты.

Мы используем VPS с 4 виртуальными ядрами, 8 ГБ ОЗУ и 204 ГБ локального диска.

Кажется, что каждые 12-18 часов у нас возникают проблемы с зависанием нашего программного обеспечения, затем диспетчер задач показывает 99-100% загрузки ЦП для mysqld

Он не работает нормально, пока я не принудительно завершу работупрограммного обеспечения и затем перезапустите службу mysql.

Вот файл настроек, который я отследил, который был ранее настроен.

my.ini settings:

[client]
port=3306
[mysql]
no-beep=
default-character-set=utf8
[mysqld]
port=3306
datadir=C:/ProgramData/MySQL/MySQL Server 5.7\Data
character-set-server=utf8
default-storage-engine=INNODB
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
log-output=FILE
general-log=0
general_log_file="xyz.log"
slow-query-log=1
slow_query_log_file="xyz-slow.log"
long_query_time=10
log-error="xyz.err"
server-id=1
secure-file-priv="C:/ProgramData/MySQL/MySQL Server 5.7/Uploads"
max_connections=151
table_open_cache=2000
tmp_table_size=249M
thread_cache_size=10
myisam_max_sort_file_size=100G
myisam_sort_buffer_size=486M
key_buffer_size=8M
read_buffer_size=64K
read_rnd_buffer_size=256K
innodb_flush_log_at_trx_commit=1
innodb_log_buffer_size=1M
innodb_buffer_pool_size=8M
innodb_log_file_size=48M
innodb_thread_concurrency=13
innodb_autoextend_increment=64
innodb_buffer_pool_instances=8
innodb_concurrency_tickets=5000
innodb_old_blocks_time=1000
innodb_open_files=300
innodb_stats_on_metadata=0
innodb_file_per_table=1
innodb_checksum_algorithm=0
back_log=80
flush_time=0
join_buffer_size=256K
max_allowed_packet=4M
max_connect_errors=100
open_files_limit=4161
sort_buffer_size=256K
table_definition_cache=1400
binlog_row_event_max_size=8K
sync_master_info=10000
sync_relay_log=10000
sync_relay_log_info=10000

Вотрис MySQLTuner для Windows и его результаты: mysql_tuner

Просто ищем некоторое представление о том, что мы можем сделать здесь, чтобы помочь решить эту проблему.Похоже, нам нужно запустить OPTIMIZE, чтобы исправить фрагментацию таблиц.

Он также показывает 23M выборок с кэшированием 0%.

Размер данных / буферный пул innodb составляет 687M / 8M

Любая помощь приветствуется.

[EDIT]

Я только что выполнил следующую команду, которую нашел в другом потоке:

SELECT CEILING(Total_InnoDB_Bytes*1.6/POWER(1024,3)) RIBPS FROM
(SELECT SUM(data_length+index_length) Total_InnoDB_Bytes
FROM information_schema.tables WHERE engine='InnoDB') A;

Я получилзначение 2 назад, поэтому я, вероятно, должен установить innodb_buffer_pool_size=2G?

SET GLOBAL innodb_buffer_pool_size=2*1024*1024*1024;
будет в порядке.У вас есть 8GB машина.Я потребую некоторое время для MySQL, чтобы динамически получить это на месте.Проверьте через 30 минут SELECT @@innodb_buffer_pool_size;, чтобы убедиться, что он выполнил ваш динамический запрос.

Вот как выглядят рецепты SHOW CREATE TABLE:

mysql> USE xyz; SHOW CREATE TABLE recipes;
Database changed
+---------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table   | Create Table                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
+---------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| recipes | CREATE TABLE `recipes` (
  `id` int(11) NOT NULL,
  `name` varchar(64) NOT NULL,
  `dname` varchar(64) NOT NULL DEFAULT '',
  `descrpara` text NOT NULL,
  `category` varchar(32) NOT NULL,
  `costperserving` float NOT NULL DEFAULT '0',
  `batchsize` int(11) NOT NULL DEFAULT '1',
  `servname` varchar(32) NOT NULL DEFAULT 'Serving',
  `rectype` tinyint(4) NOT NULL DEFAULT '0',
  `servweight` float NOT NULL DEFAULT '0',
  `servflvol` float NOT NULL DEFAULT '0',
  `flags` tinyint(4) NOT NULL DEFAULT '0',
  `isapproved` tinyint(4) NOT NULL DEFAULT '0',
  `isapproved2` tinyint(4) NOT NULL DEFAULT '0',
  `tags` varchar(128) NOT NULL DEFAULT '',
  `allrestr` tinyint(4) NOT NULL DEFAULT '0',
  `numsides` tinyint(4) NOT NULL DEFAULT '0',
  `utensils` varchar(64) NOT NULL DEFAULT '',
  `active` tinyint(4) NOT NULL DEFAULT '1',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+---------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

Опять же, я супер новичок, но может быть что-то, где наш файл my.ini показывает набор символов по умолчанию utf8, но в этом он показывает latin1?

Я обновлю их снова через 24 часа

PasteBin ссылки для

ПОКАЗАТЬ ГЛОБАЛЬНОЕ СОСТОЯНИЕ

ПОКАЗАТЬ ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ

ПОКАЗАТЬ СТАТУС INNODB ДВИГАТЕЛЯ


MySQLTuner после> 1 дня безотказной работы.Это также после изменения innodb_buffer_pool_size = 8M на 1G.Общее использование ОЗУ для mysqld с тех пор составляло около 1,25 ГБ.

MySQL Tuner 0.8.3 - Peter Chapman <peter@conglomo.co.nz>
Performing tests on localhost:3306 at Friday, 16 November 2018 6:13:41 AM
Currently running supported MySQL version 5.7.24-log
Archive Engine Installed
Berkeley DB Engine Not Installed
Federated Engine Not Installed
InnoDB Engine Installed
ISAM Engine Not Installed
NDBCLUSTER Engine Not Installed
Data in InnoDB tables: 687M (Tables: 257)
Data in MyISAM tables: 6M (Tables: 32)
Total fragmented tables: 67
All database users have passwords assigned
Up for: 1d 10h 33m 15s (49M q [397.000 qps], 38K conn, TX: 43G, RX: 3G)
Reads / Writes: 99% / 1%
Total buffers: 1.0G global + 1.1M per thread (151 max threads)
Maximum possible memory usage: 1.2G (14% of installed RAM)
Slow queries: 1% (4/49M)
Highest usage of available connections: 26% (38/151)
Key buffer size / total MyISAM indexes: 8.0M/1.0M
Key buffer hit rate: 98% (630 cached / 9 reads)
Query cache efficiency: 0% (0 cached / 47M selects)
Query cache prunes per day: 0
Sorts requiring temporary tables: 1% (2K temp sorts / 377K sorts)
Joins performed without indexes: 13254
Temporary tables created on disk: 3% (2K on disk / 79K total)
Thread cache hit rate: 99% (41 created / 38K connections)
Table cache hit rate: 26% (2K open / 7K opened)
Open file limit used: 0% (10/6K)
Table locks acquired immediately: 100% (682 immediate / 682 locks)
InnoDB data size / buffer pool: 687.0M/1.0G
Run OPTIMIZE TABLE to defragment tables for better performance
Adjust your join queries to always utilize indexes
query_cache_limit (> 1M, or use smaller result sets)
join_buffer_size (> 256.0K, or always use indexes with joins)
Scan Completed at Friday, 16 November 2018 6:13:44 AM

ПОКАЗАТЬ ГЛОБАЛЬНОЕ СОСТОЯНИЕ -> 1 день безотказной работы

ПОКАЗАТЬ ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ ->1 день безотказной работы

Ответы [ 2 ]

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

Дополнительные предложения для вашего my.ini [mysqld] раздела Скорость в секунду = RPS

innodb_buffer_pool_size=2G  # from 1G reported in SHOW GLOBAL STATUS of 11/16
innodb_lru_scan_depth=100  # from 1024 to conserve CPU cycles every SECOND
thread_cache_size=100  # from 10 to increase threads_cached for increased performance
innodb_io_capacity=1600  # from 200 to allow higher IOPS 
read_rnd_buffer_size=192K  # from 256K to reduce handler_read_rnd_next RPS of 63407
innodb_log_buffer_size=16M  # from 1M for ~ 30 minutes in RAM before WD
open_files_limit=8192  # from 6209 to reduce opened_files RPHour of 152
table_open_cache=3000  # from 2000 to reduce opened_tables RPHour of 258
query_cache_size=0  # from 1M to conserve RAM since QC is OFF

Для получения дополнительной помощи, пожалуйста, просмотрите мой профиль, Сетевой профиль для контактной информации.

Если вы добавите комментарий, пожалуйста, начните с @wilsonhauck, чтобы SO автоматически предупреждал меня.

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

Предложение рассмотреть для немедленной помощи

SET GLOBAL innodb_buffer_pool_size=1*1024*1024*1024

из командной строки MySQL

изменит мир для вас и, возможно, позволит вам выжить, пока выясняются другие детали.

Измените раздел my.ini [mysqld] на 1G для следующих служб остановки / запуска.

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