Помещение:
Я не администратор баз данных и не разбираюсь в серверах, но я единственный человек в компании, который может использовать кое-что из этого.
У нас есть Windows VPS со следующими характеристиками:
Процессор: Intel Xeon E5-2630 v4 2,20 ГГц
Оперативная память: 60 ГБ
SO: Центр обработки данных Windows Server 2016
Жесткий диск: 2 ТБ SSD
Здесь я разместил свои веб-приложения, которые обращаются к БД, размещенной на том же сервере, веб-приложения используются +- 1000 пользователей, которым требуются данные из БД через API веб-приложений, версия MySQL: 8.0.20 (Сервер сообщества MySQL — GPL)
А вот мой.ini
# Другие значения настройки по умолчанию
# Файл конфигурации экземпляра сервера MySQL
# --------------------------------------------- ---------------------
# Генерируется Мастером настройки экземпляра сервера MySQL
#
# Инструкция по установке
# --------------------------------------------- ---------------------
#
# В Linux вы можете скопировать этот файл в /etc/my.cnf, чтобы установить глобальные параметры,
# mysql-data-dir/my.cnf для установки специфичных для сервера параметров
# (@localstatedir@ для этой установки) или в
# ~/.my.cnf для установки пользовательских параметров.
#
# В Windows вы должны хранить этот файл в каталоге установки
# вашего сервера (например, C:\Program Files\MySQL\MySQL Server X.Y). К
# убедитесь, что сервер читает файл конфигурации, используйте параметр запуска
# "--файл по умолчанию".
#
# Чтобы запустить сервер из командной строки, выполните это в
# оболочка командной строки, например.
# mysqld --defaults-file="C:\Program Files\MySQL\MySQL Server X.Y\my.ini"
#
# Чтобы установить сервер как службу Windows вручную, выполните это в
# оболочка командной строки, например.
# mysqld --install MySQLXY --defaults-file="C:\Program Files\MySQL\MySQL Server X.Y\my.ini"
#
# А затем выполните это в оболочке командной строки, чтобы запустить сервер, например
# чистый старт MySQLXY
#
# Рекомендации по редактированию этого файла
# --------------------------------------------- ---------------------
#
# В этом файле вы можете использовать все длинные опции, которые поддерживает программа.
# Если вы хотите узнать, какие параметры поддерживает программа, запустите программу
# с опцией "--help".
#
# Более подробная информация об отдельных опциях также может быть
# найдено в руководстве.
#
# Советы по изменению настроек см.
# https://dev.mysql.com/doc/refman/8.0/en/server-configuration-defaults.html
#
# КЛИЕНТСКИЙ РАЗДЕЛ
# --------------------------------------------- ---------------------
#
# Следующие параметры будут считываться клиентскими приложениями MySQL.
# Обратите внимание, что только клиентские приложения, поставляемые MySQL, гарантированно
# чтобы прочитать этот раздел. Если вы хотите, чтобы ваша собственная клиентская программа MySQL
# учитывайте эти значения, вам нужно указать это как опцию во время
# Инициализация клиентской библиотеки MySQL.
#
[клиент]
# труба=
# сокет=MYSQL
порт=3306
[mysql]
нет звукового сигнала =
# набор символов по умолчанию =
# СЕРВЕРНАЯ СЕКЦИЯ
# --------------------------------------------- ---------------------
#
# Следующие опции будут прочитаны сервером MySQL. Убедись в том, что
# вы правильно установили сервер (см. выше), поэтому он читает это
# файл.=
#
# тип_сервера=2
[mysqld]
# Следующие три параметра являются взаимоисключающими для SERVER_PORT ниже.
# пропуск сети =
# включить именованный канал =
# общая-память=
# общая-память-базовое-имя = MYSQL
# Труба, которую будет использовать сервер MySQL
# сокет=MYSQL
# Порт TCP/IP, который сервер MySQL будет прослушивать
порт=3306
# Путь к каталогу установки. Все пути обычно разрешаются относительно этого.
#basedir="C:/Program Files/MySQL/MySQL Server 8.0/"
# Путь к корню базы данных
datadir=C:/ProgramData/MySQL/MySQL Server 8.0/Данные
# Набор символов по умолчанию, который будет использоваться при создании новой схемы или таблицы.
# создан, но набор символов не определен
# сервер набора символов =
# Плагин аутентификации по умолчанию, который будет использоваться при подключении к серверу
default_authentication_plugin=mysql_native_password
# Механизм хранения по умолчанию, который будет использоваться при создании новых таблиц, когда
механизм хранения по умолчанию = INNODB
# Установить режим SQL на строгий
sql-mode = "STRICT_TRANS_TABLES, NO_ENGINE_SUBSTITUTION"
# Общая и медленная регистрация.
лог-выход = ФАЙЛ
общий журнал = 0
general_log_file="VMI384596.log"
журнал медленных запросов = 1
slow_query_log_file="VMI384596-slow.log"
long_query_time = 10
# Регистрация ошибок.
лог-ошибка = "VMI384596.err"
# ***** Группа, связанная с репликацией *****
# Задает базовое имя для двоичных файлов журнала. С бинарным журналированием
# включено, сервер регистрирует все операторы, которые изменяют данные в двоичном формате
# журнал, который используется для резервного копирования и репликации.
журнал-бен = "VMI384596-бен"
# ***** Группа, связанная с репликацией *****
# Устанавливает двоичный формат журнала и может быть любым из STATEMENT, ROW,
# или СМЕШАННЫЙ. ROW рекомендуется для групповой репликации.
# бинлог_формат=
# ***** Группа, связанная с репликацией *****
# Заставляет мастер записывать контрольную сумму для каждого события в двоичном журнале.
# binlog_checksum поддерживает значения NONE (отключено) и CRC32.
# По умолчанию используется CRC32. Когда отключено (значение NONE), сервер проверяет
# что он записывает в бинарный журнал только полные события, записывая
# и проверка длины события (а не контрольной суммы) для каждого события.
# NONE должен использоваться с групповой репликацией.
# binlog_checksum=
# ***** Группа, связанная с репликацией *****
# Базовое имя журнала ретрансляции. Сервер создает файлы журнала ретрансляции в
# путем добавления числового суффикса к базовому имени. Если вы укажете это
# параметр, указанное значение также используется в качестве базового имени для журнала ретрансляции
# индексный файл. Журналы ретрансляции увеличивают скорость за счет балансировки нагрузки между дисками.
# реле_лог=
# ***** Группа, связанная с репликацией *****
# Указывает идентификатор сервера. Для серверов, которые используются в топологии репликации,
# вы должны указать уникальный идентификатор сервера для каждого сервера репликации в
# диапазон от 1 до 2^32 - 1. �Unique� означает, что все идентификаторы должны быть разными
# от каждого другого идентификатора, используемого любым другим мастером или ведомым устройством репликации.
идентификатор сервера = 1
# ***** Группа, связанная с репликацией *****
# Имя хоста или IP-адрес ведомого устройства, которое будет передано ведущему.
# во время регистрации слейва. Это значение появляется в выводе SHOW SLAVE HOSTS.
# на главном сервере. Оставьте значение неустановленным, если вы не хотите, чтобы подчиненный
# зарегистрируйтесь у мастера.
# отчет_хост=0.0
# ***** Группа, связанная с репликацией *****
# Номер порта TCP/IP для подключения к ведомому, который должен быть сообщен ведущему во время
# регистрация раб. Установите это только в том случае, если ведомое устройство прослушивает порт, отличный от порта по умолчанию, или если
# у вас есть специальный туннель от мастера или других клиентов к слейву.
отчет_порт = 3306
# ***** Группа, связанная с репликацией *****
# Эта опция указывает, будут ли использоваться глобальные идентификаторы транзакций (GTID).
# используется для идентификации транзакций. ON необходимо использовать с групповой репликацией.
# gtid_mode=
# ***** Группа, связанная с репликацией *****
# Если этот параметр включен, сервер обеспечивает согласованность GTID, разрешая выполнение
# только операторы, которые можно безопасно зарегистрировать с помощью GTID. Вы должны установить это
# установите значение ON перед включением репликации на основе GTID.
# обеспечить_gtid_consistency=
# ***** Группа, связанная с репликацией *****
# Должны ли обновления, полученные подчиненным сервером от главного сервера, быть
# регистрируется в собственном двоичном журнале подчиненного устройства. Двоичное ведение журнала должно быть включено на
# подчиненный для этой переменной, чтобы иметь какой-либо эффект. ON должен использоваться с
# Групповая репликация.
# log_slave_updates=
# ***** Группа, связанная с репликацией *****
# Определяет, регистрирует ли подчиненный сервер статус главного и информацию о соединении
# в таблицу InnoDB в базе данных mysql или в файл в каталоге данных.
# Параметр TABLE требуется, когда настроено несколько каналов репликации.
# master_info_repository=
# ***** Группа, связанная с репликацией *****
# Определяет, регистрирует ли подчиненный сервер свою позицию в журналах ретрансляции в InnoDB
# таблица в базе данных mysql или в файл в каталоге данных. Настройка ТАБЛИЦА
# требуется при настройке нескольких каналов репликации.
# relay_log_info_repository=
# ***** Группа, связанная с репликацией *****
# Определяет алгоритм, используемый для хеширования записей, извлеченных во время транзакции. если ты
# используется групповая репликация, эта переменная должна быть установлена в XXHASH64, так как процесс
# извлечения записей из транзакции требуется для обнаружения конфликтов на всех
# Участники группы.
# transaction_write_set_extraction=
# ПРИМЕЧАНИЕ. Измените это значение после того, как инициализация сервера не вступит в силу.
нижний_case_table_names=1
# Безопасный файл priv.
secure-file-priv="C:/ProgramData/MySQL/MySQL Server 8.0/Загрузки"
# Максимальное количество одновременных сеансов, которые сервер MySQL может
# позволять. Одно из этих подключений будет зарезервировано для пользователя с
# СУПЕР привилегии, позволяющие администратору войти в систему, даже если
# лимит подключений достигнут.
макс_подключения = 2000
# Количество открытых таблиц для всех потоков. Увеличение этого значения
# увеличивает количество файловых дескрипторов, которые требуются mysqld.
# Поэтому вы должны обязательно установить количество открытых файлов
# разрешено не менее 4096 в переменной "open-files-limit" в
# раздел [mysqld_safe]
table_open_cache=2000
# Максимальный размер внутренних (в памяти) временных таблиц. Если таблица
# становится больше, чем это значение, оно автоматически преобразуется в дисковое
# таблица на основе Это ограничение относится к одной таблице. Может быть много
# их.
tmp_table_size = 4G
# Сколько потоков мы должны хранить в кеше для повторного использования. Когда клиент
# отключается, потоки клиента помещаются в кеш, если их нет
# больше потоков, чем thread_cache_size из предыдущего. Это значительно снижает
# необходимое количество созданий потоков, если у вас много новых
# соединения. (Обычно это не дает заметных результатов
# улучшение, если у вас есть хорошая реализация потока.)
thread_cache_size = 10
# *** Специальные параметры MyISAM
# Максимальный размер временного файла, который MySQL может использовать при
# воссоздание индекса (во время REPAIR, ALTER TABLE или LOAD DATA INFILE.
# Если размер файла будет больше этого, будет создан индекс
# через кеш ключей (что медленнее).
myisam_max_sort_file_size=10G
# Размер буфера, который выделяется при сортировке индексов MyISAM
# во время REPAIR TABLE или при создании индексов с помощью CREATE INDEX
# или ИЗМЕНИТЬ ТАБЛИЦУ.
myisam_sort_buffer_size=256K
# Размер буфера ключей, используемого для кэширования индексных блоков для таблиц MyISAM.
# Не устанавливайте его больше, чем 30% доступной памяти, так как часть памяти
# также требуется ОС для кэширования строк. Даже если вы не используете
# Таблицы MyISAM, вы все равно должны установить его на 8-64M, так как он также будет
# используется для внутренних временных дисковых таблиц.
key_buffer_size = 64M
# Размер буфера, используемого для полного сканирования таблиц MyISAM.
# Выделяется на поток, если требуется полное сканирование.
read_buffer_size=64K
read_rnd_buffer_size=256K
# *** Специальные опции INNODB ***
# innodb_data_home_dir=
# Используйте эту опцию, если у вас есть сервер MySQL с включенной поддержкой InnoDB
# но вы не планируете его использовать. Это сэкономит память и место на диске
# и ускорить некоторые вещи.
# пропустить-innodb=
# Если установлено значение 1, InnoDB будет сбрасывать (fsync) журналы транзакций в
# диск при каждом коммите, что обеспечивает полное поведение ACID. Если ты
# готовы поступиться этой безопасностью, и у вас мало
# транзакций, вы можете установить это значение в 0 или 2, чтобы уменьшить дисковый ввод-вывод до
# логи. Значение 0 означает, что журнал записывается только в файл журнала и
# файл журнала сбрасывается на диск примерно раз в секунду. Значение 2
# означает, что журнал записывается в файл журнала при каждой фиксации, но журнал
# файл сбрасывается на диск примерно раз в секунду.
innodb_flush_log_at_trx_commit = 1
# Размер буфера, который InnoDB использует для буферизации данных журнала. Как только
# он заполнен, InnoDB придется сбросить его на диск. Как это смыто
# в любом случае раз в секунду, нет смысла делать его очень большим
# (даже при длинных транзакциях).
# InnoDB, в отличие от MyISAM, использует пул буферов для кэширования как индексов, так и
# Данные ряда. Чем больше вы установите это значение, тем меньше дискового ввода-вывода потребуется для
# доступ к данным в таблицах. На выделенном сервере базы данных вы можете установить это
# параметр до 80% объема физической памяти машины. Не устанавливайте его
# слишком большой, потому что конкуренция за физическую память может
# вызвать пейджинг в операционной системе. Обратите внимание, что в 32-битных системах вы
# может быть ограничено 2-3,5 ГБ пользовательской памяти на процесс, поэтому не
# установите слишком высокое значение.
innodb_buffer_pool_size=38G
# Размер каждого файла журнала в группе журналов. Вы должны установить комбинированный размер
# файлов журналов примерно до 25%-100% от размера вашего буферного пула, чтобы избежать
# ненужная активность очистки буферного пула при перезаписи файла журнала. Однако,
# обратите внимание, что больший размер файла журнала увеличит время, необходимое для
# процесс восстановления.
innodb_log_file_size=48M
# Количество потоков, разрешенных внутри ядра InnoDB. Оптимальное значение
# сильно зависит от приложения, оборудования и ОС
# свойства планировщика. Слишком высокое значение может привести к перегрузке потока.
innodb_thread_concurrency=21
# Размер приращения (в МБ) для увеличения размера автоматически расширяемого файла системного табличного пространства InnoDB, когда он заполняется.
innodb_autoextend_increment = 64
# Количество областей, на которые разделен буферный пул InnoDB.
# Для систем с пулами буферов размером в несколько гигабайт разделение пула буферов на отдельные экземпляры может улучшить параллелизм,
# уменьшая конкуренцию при чтении и записи кэшированных страниц разными потоками.
innodb_buffer_pool_instances=8
# Определяет количество потоков, которые могут одновременно входить в InnoDB.
innodb_concurrency_tickets=5000
# Определяет, как долго в миллисекундах (мс) блок, вставленный в старый подсписок, должен оставаться там после первого доступа, прежде чем
# его можно переместить в новый подсписок.
innodb_old_blocks_time=1000
# Указывает максимальное количество файлов .ibd, которые MySQL может держать открытыми одновременно. Минимальное значение равно 10.
innodb_open_files=300
# Когда эта переменная включена, InnoDB обновляет статистику во время операторов метаданных.
innodb_stats_on_metadata=0
# Когда innodb_file_per_table включен (по умолчанию в 5.6.6 и выше), InnoDB сохраняет данные и индексы для каждой вновь созданной таблицы
# в отдельном файле .ibd, а не в системном табличном пространстве.
innodb_file_per_table=1
# Используйте следующий список значений: 0 для crc32, 1 для strict_crc32, 2 для innodb, 3 для strict_innodb, 4 для отсутствия, 5 для strict_none.
innodb_checksum_algorithm = нет
пропустить-innodb-doublewrite =
# Количество невыполненных запросов на соединение, которые может иметь MySQL.
# Эта опция полезна, когда основной поток MySQL получает много запросов на соединение за очень короткое время.
# Затем основному потоку требуется некоторое время (хотя и очень мало), чтобы проверить соединение и запустить новый поток.
# Значение back_log указывает, сколько запросов может быть сложено в стек за это короткое время, прежде чем MySQL на мгновение
# перестает отвечать на новые запросы.
# Вам нужно увеличить это, только если вы ожидаете большое количество подключений за короткий промежуток времени.
back_log=80
# Если установлено ненулевое значение, все таблицы закрываются каждые flush_time секунд для высвобождения ресурсов и
# синхронизировать несохраненные данные на диск.
# Эту опцию лучше всего использовать только в системах с минимальными ресурсами.
флеш_время = 0
# Минимальный размер буфера, который используется для сканирования простого индекса, сканирования индекса диапазона и соединений, которые не используют
# индексирует и, таким образом, выполняет полное сканирование таблицы.
join_buffer_size=256K
# Максимальный размер одного пакета или любой сгенерированной или промежуточной строки, или любого параметра, отправленного
# mysql_stmt_send_long_data() Функция C API.
max_allowed_packet=4M
# Если несколько последовательных запросов на подключение от хоста прерываются без успешного подключения,
# сервер блокирует этот хост от выполнения дальнейших подключений.
max_connect_errors=100
# Изменяет количество файловых дескрипторов, доступных для mysqld.
# Вам следует попробовать увеличить значение этой опции, если mysqld выдает ошибку "Слишком много открытых файлов".
open_files_limit=4161
# Если вы видите много sort_merge_passes в секунду в выводе SHOW GLOBAL STATUS, вы можете рассмотреть возможность увеличения
# значение sort_buffer_size для ускорения операций ORDER BY или GROUP BY, которые нельзя улучшить с помощью оптимизации запросов
# или улучшенная индексация.
sort_buffer_size = 256 КБ
# Количество определений таблиц (из файлов .frm), которые можно сохранить в кэше определений.
# Если вы используете большое количество таблиц, вы можете создать кэш определений больших таблиц, чтобы ускорить открытие таблиц.
# Кэш определения таблицы занимает меньше места и не использует файловые дескрипторы, в отличие от обычного кэша таблиц.
# Минимальное значение и значение по умолчанию равно 400.
table_definition_cache=1400
# Укажите максимальный размер двоичного события журнала на основе строк в байтах.
# Строки группируются в события меньшего размера, если это возможно. Значение должно быть кратно 256.
binlog_row_event_max_size=8K
# Если значение этой переменной больше 0, подчиненное устройство репликации синхронизирует свой файл master.info с диском.
# (используя fdatasync()) после каждого события sync_master_info.
sync_master_info=10000
# Если значение этой переменной больше 0, сервер MySQL синхронизирует свой журнал ретрансляции с диском.
# (используя fdatasync()) после каждой записи sync_relay_log в журнал реле.
sync_relay_log=10000
# Если значение этой переменной больше 0, подчиненное устройство репликации синхронизирует свой файл relay-log.info с диском.
# (используя fdatasync()) после каждой транзакции sync_relay_log_info.
sync_relay_log_info=10000
# Загрузить плагины mysql при запуске."plugin_x ; plugin_y".
# plugin_load=
# Порт TCP/IP, который будет прослушивать протокол MySQL Server X.
# свободный_mysqlx_port=33060
# Размер буфера ключей, используемого для кэширования индексных блоков для таблиц MyISAM.
# Не устанавливайте его больше, чем 30% доступной памяти, так как часть памяти
# также требуется ОС для кэширования строк. Даже если вы не используете
# Таблицы MyISAM, вы все равно должны установить его на 8-64M, так как он также будет
# используется для внутренних временных дисковых таблиц.
Как мне улучшить производительность MySQL и предотвратить сбой сервера, ограничив использование ЦП?