Параметры сервера в Базе данных Azure для MySQL (Гибкий сервер)
ОБЛАСТЬ ПРИМЕНЕНИЯ: База данных Azure для MySQL — гибкий сервер
В этой статье приведены рекомендации и рекомендации по настройке параметров сервера в База данных Azure для MySQL — гибкий сервер.
Примечание.
В этой статье содержатся ссылки на термин "раб", который корпорация Майкрософт больше не использует. Когда этот термин будет удален из программного обеспечения, мы удалим его из статьи.
Что такое параметры сервера?
Подсистема MySQL предоставляет множество параметров сервера (также называемых переменными), которые можно использовать для настройки и настройки поведения ядра. Некоторые параметры можно задать динамически во время выполнения. Другие являются статическими и требуют перезапуска сервера после их установки.
В База данных Azure для MySQL — гибкий сервер можно изменить значение различных параметров сервера MySQL с помощью портал Azure и Azure CLI в соответствии с потребностями рабочей нагрузки.
Настраиваемые параметры сервера
Вы можете управлять конфигурацией База данных Azure для MySQL гибкого сервера с помощью параметров сервера. Параметры сервера настраиваются по умолчанию и рекомендуемыми значениями при создании сервера. В области параметров сервера в портал Azure отображаются изменяемые и неизменяемые параметры. Неизменяемые параметры сервера недоступны.
Список поддерживаемых параметров постоянно растет. Можно использовать портал Azure для периодического просмотра полного списка параметров сервера и настройки значений.
Если изменить параметр статического сервера с помощью портала, необходимо перезапустить сервер, чтобы изменения вступили в силу. Если вы используете сценарии автоматизации (с помощью таких средств, как шаблоны Azure Resource Manager, Terraform или Azure CLI), сценарий должен подготовиться для перезапуска службы, чтобы параметры вступили в силу, даже если вы изменяете конфигурацию в процессе создания.
Если вы хотите изменить немодифицируемый параметр сервера для вашей среды, опубликуйте идею с помощью отзывов сообщества или проголосуйте, если отзывы уже существуют (что может помочь нам определить приоритет).
В следующих разделах описываются ограничения часто обновляемых параметров сервера. Уровень вычислений и размер (виртуальные ядра) сервера определяют ограничения.
lower_case_table_names
Для MySQL версии 5.7 значение lower_case_table_names
по умолчанию находится 1
в База данных Azure для MySQL — гибкий сервер. Несмотря на то что можно изменить поддерживаемое значение 2
на , отмена обратно 2
на 1
не допускается. Чтобы помочь в изменении значения по умолчанию, создайте запрос в службу поддержки.
Для MySQL версии 8.0+ можно настроить lower_case_table_names
только при инициализации сервера. Подробнее. lower_case_table_names
Изменение параметра после инициализации сервера запрещено.
Поддерживаемые значения для MySQL версии 8.0 находятся 1
в 2
База данных Azure для MySQL — гибкий сервер. Значение по умолчанию — 1
. Чтобы помочь в изменении значения по умолчанию во время создания сервера, создайте запрос в службу поддержки.
innodb_tmpdir
Параметр innodb_tmpdir в База данных Azure для MySQL — гибкий сервер используется для определения каталога для временных файлов сортировки, созданных во время перестроения в сетиALTER TABLE
.
Значение innodb_tmpdir
по умолчанию — /mnt/temp
. Это расположение соответствует временному хранилищу (SSD) и доступно в гибибайтах (GiB) с каждым размером вычислительных ресурсов сервера. Это расположение идеально подходит для операций, для которых не требуется большое количество места.
Если требуется больше места, можно задать значение innodb_tmpdir
/app/work/tmpdir
. Этот параметр использует доступную емкость хранилища на База данных Azure для MySQL гибком сервере. Этот параметр может быть полезным для больших операций, требующих дополнительного временного хранилища.
Помните, что использование /app/work/tmpdir
результатов в более медленной производительности по сравнению со значением временного хранилища (SSD) /mnt/temp
по умолчанию. Выбор зависит от конкретных требований операций.
Информация, указанная для innodb_tmpdir
этого, применима к параметрам innodb_temp_tablespaces_dir, tmpdir и slave_load_tmpdir где:
- Общее значение
/mnt/temp
по умолчанию. - Альтернативный каталог
/app/work/tmpdir
доступен для настройки расширенного временного хранилища с компромиссом в производительности на основе конкретных операционных требований.
log_bin_trust_function_creators
В База данных Azure для MySQL — гибкий сервер, двоичные журналы всегда включены (то есть log_bin
задано значение ON
). Параметр log_bin_trust_function_creators
по умолчанию устанавливается ON
на гибких серверах.
Формат двоичного ведения журнала всегда ROW
доступен, а подключения к серверу всегда используют двоичное ведение журнала на основе строк. При использовании двоичного ведения журнала на основе строк проблемы безопасности не существуют, и двоичное ведение журнала не может прерываться, поэтому вы можете безопасно разрешить log_bin_trust_function_creators
оставаться как ON
.
Если log_bin_trust_function_creators
задано OFF
значение, и вы пытаетесь создать триггеры, могут возникнуть ошибки, аналогичные: "У вас нет привилегий SUPER, а двоичное ведение журнала включено (может потребоваться использовать менее безопасную log_bin_trust_function_creators
переменную)."
innodb_buffer_pool_size
Чтобы узнать о параметре innodb_buffer_pool_size
, ознакомьтесь с документацией по MySQL.
Размер физической памяти в следующей таблице представляет доступную память случайного доступа (ОЗУ) в гигабайтах (ГБ) на гибком сервере База данных Azure для MySQL.
Ценовая категория | Количество виртуальных ядер | Размер физической памяти (ГБ) | Значение по умолчанию (байт) | Минимальное значение (байт) | Максимальное значение (байт) |
---|---|---|---|---|---|
С увеличивающейся производительностью (B1s) | 1 | 1 | 134217728 | 33554432 | 268435456 |
С увеличивающейся производительностью (B1ms) | 1 | 2 | 536 870 912 | 134217728 | 1073741824 |
Ускорение (B2s) | 2 | 4 | 2147483648 | 134217728 | 2147483648 |
Ускорение (B2ms) | 2 | 8 | 4294967296 | 134217728 | 5368709120 |
С увеличивающейся производительностью | 4 | 16 | 12884901888 | 134217728 | 12884901888 |
С увеличивающейся производительностью | 8 | 32 | 25769803776 | 134217728 | 25769803776 |
С увеличивающейся производительностью | 12 | 48 | 51539607552 | 134217728 | 51539607552 |
С увеличивающейся производительностью | 16 | 64 | 2147483648 | 134217728 | 2147483648 |
С увеличивающейся производительностью | 20 | 80 | 64424509440 | 134217728 | 64424509440 |
Общего назначения | 2 | 8 | 4294967296 | 134217728 | 5368709120 |
Общего назначения | 4 | 16 | 12884901888 | 134217728 | 12884901888 |
Общего назначения | 8 | 32 | 25769803776 | 134217728 | 25769803776 |
Общее назначение | 16 | 64 | 51539607552 | 134217728 | 51539607552 |
Общее назначение | 32 | 128 | 103079215104 | 134217728 | 103079215104 |
Общего назначения | 48 | 192 | 154618822656 | 134217728 | 154618822656 |
Общее назначение | 64 | 256 | 206158430208 | 134217728 | 206158430208 |
Критически важный для бизнеса | 2 | 16 | 12884901888 | 134217728 | 12884901888 |
Критически важный для бизнеса | 4 | 32 | 25769803776 | 134217728 | 25769803776 |
Критически важный для бизнеса | 8 | 64 | 51539607552 | 134217728 | 51539607552 |
Критически важный для бизнеса | 16 | 128 | 103079215104 | 134217728 | 103079215104 |
Критически важный для бизнеса | 20 | 160 | 128849018880 | 134217728 | 128849018880 |
Критически важный для бизнеса | 32 | 256 | 206158430208 | 134217728 | 206158430208 |
Критически важный для бизнеса | 48 | 384 | 309237645312 | 134217728 | 309237645312 |
Критически важный для бизнеса | 64 | 504 | 405874409472 | 134217728 | 405874409472 |
innodb_file_per_table
MySQL сохраняет таблицу InnoDB в разных пространствах таблиц на основе конфигурации, предоставленной во время создания таблицы. Табличное пространство системы — это область хранения для словаря данных InnoDB. Пространство таблиц для каждого файла содержит данные и индексы для одной таблицы InnoDB, и она хранится в файловой системе в собственном файле данных. Параметр сервера innodb_file_per_table управляет этим поведением.
Если задать для innodb_file_per_table
значение OFF
, InnoDB создаст таблицы в системном табличном пространстве. В противном случае InnoDB создает таблицы в табличных пространствах file-per-table.
База данных Azure для MySQL — гибкий сервер поддерживает не более 8 терабайт (ТБ) в одном файле данных. Если размер базы данных превышает 8 ТБ, необходимо создать таблицу innodb_file_per_table
в пространстве таблиц. Если размер одной таблицы превышает 8 ТБ, следует использовать таблицу секционирования.
innodb_log_file_size
Значением innodb_log_file_size является размер (в байтах) каждого файла журнала в группе журналов. Объединенный размер файлов журнала (innodb_log_file_size innodb_log_files_in_group * ) не может превышать максимальное значение, которое чуть меньше 512 ГБ.
Больший размер файла журнала лучше подходит для производительности, но недостаток заключается в том, что время восстановления после сбоя является высоким. Необходимо сбалансировать время восстановления для редкого события сбоя и максимизации пропускной способности во время пиковых операций. Более большой размер файла журнала также может привести к более длительному времени перезапуска.
Можно настроить innodb_log_size
256 мегабайт (МБ), 512 МБ, 1 ГБ или 2 ГБ для База данных Azure для MySQL — гибкий сервер. Параметр является статическим и требует перезагрузки.
Примечание.
Если вы изменили innodb_log_file_size
параметр по умолчанию, проверьте, остается ли значение show global status like 'innodb_buffer_pool_pages_dirty'
в 0
течение 30 секунд, чтобы избежать задержки перезапуска.
max_connections
Размер памяти сервера определяет значение max_connections
. Размер физической памяти в следующей таблице представляет доступную ОЗУ в гигабайтах на База данных Azure для MySQL гибком сервере.
Ценовая категория | Количество виртуальных ядер | Размер физической памяти (ГБ) | Default value | Минимальное значение | Максимальное значение |
---|---|---|---|---|---|
С увеличивающейся производительностью (B1s) | 1 | 1 | 85 | 10 | 171 |
С увеличивающейся производительностью (B1ms) | 1 | 2 | 171 | 10 | 341 |
Ускорение (B2s) | 2 | 4 | 341 | 10 | 683 |
Ускорение (B2ms) | 2 | 4 | 683 | 10 | 1365 |
С увеличивающейся производительностью | 4 | 16 | 1365 | 10 | 2731 |
С увеличивающейся производительностью | 8 | 32 | 2731 | 10 | 5461 |
С увеличивающейся производительностью | 12 | 48 | 4097 | 10 | 8193 |
С увеличивающейся производительностью | 16 | 64 | 5461 | 10 | 10923 |
С увеличивающейся производительностью | 20 | 80 | 6827 | 10 | 13653 |
Общего назначения | 2 | 8 | 683 | 10 | 1365 |
Общего назначения | 4 | 16 | 1365 | 10 | 2731 |
Общего назначения | 8 | 32 | 2731 | 10 | 5461 |
Общее назначение | 16 | 64 | 5461 | 10 | 10923 |
Общее назначение | 32 | 128 | 10923 | 10 | 21845 |
Общего назначения | 48 | 192 | 16384 | 10 | 32768 |
Общее назначение | 64 | 256 | 21845 | 10 | 43691 |
Критически важный для бизнеса | 2 | 16 | 1365 | 10 | 2731 |
Критически важный для бизнеса | 4 | 32 | 2731 | 10 | 5461 |
Критически важный для бизнеса | 8 | 64 | 5461 | 10 | 10923 |
Критически важный для бизнеса | 16 | 128 | 10923 | 10 | 21845 |
Критически важный для бизнеса | 20 | 160 | 13653 | 10 | 27306 |
Критически важный для бизнеса | 32 | 256 | 21845 | 10 | 43691 |
Критически важный для бизнеса | 48 | 384 | 32768 | 10 | 65536 |
Критически важный для бизнеса | 64 | 504 | 43008 | 10 | 86016 |
Если подключения превышают предел, может появиться следующая ошибка: ERROR 1040 (08004): слишком много подключений.
Создание новых клиентских подключений к MySQL занимает время. После установки этих подключений они занимают ресурсы базы данных, даже если они неактивные. Большинство приложений запрашивают много кратковременных соединений, из-за которых и возникает такая ситуация. Результатом является меньше ресурсов, доступных для вашей фактической рабочей нагрузки, что приводит к снижению производительности.
Пул подключений, который уменьшает простои подключений и повторно использует существующие подключения, помогает избежать этой проблемы. Для лучшего взаимодействия рекомендуется использовать пул подключений, например ProxySQL, для эффективного управления подключениями. Дополнительные сведения о настройке ProxySQL см . в этой записи блога.
Примечание.
ProxySQL — это средство сообщества с открытым исходным кодом. Корпорация Майкрософт поддерживает ее на основе лучших усилий. Чтобы получить поддержку рабочей среды с помощью авторитетных рекомендаций, обратитесь в службу поддержки продуктов ProxySQL.
innodb_strict_mode
Если вы получаете ошибку, аналогичную ошибке "Размер строки слишком большой (> 8126)," может потребоваться отключить innodb_strict_mode
параметр сервера. Этот параметр нельзя изменить глобально на уровне сервера, так как если размер данных строки превышает 8 КБ, данные усечены без ошибки. Это усечение может привести к потенциальной потере данных. Рекомендуется изменить схему в соответствии с предельным размером страницы.
Этот параметр можно задать на уровне сеанса с помощью init_connect
. Дополнительные сведения см. в разделе "Настройка неизменяемых параметров сервера".
Примечание.
Если у вас есть сервер реплики чтения, параметр innodb_strict_mode
OFF
на уровне сеанса на исходном сервере прерывает репликацию. При наличии реплик чтения рекомендуем оставить параметр в состоянии ON
.
time_zone
При первоначальном развертывании База данных Azure для MySQL — гибкий экземпляр сервера включает системные таблицы для сведений часового пояса, но эти таблицы не заполняются. Таблицы часовых поясов можно заполнить, вызвав mysql.az_load_timezone
хранимую процедуру из средства, например командной строки MySQL или MySQL Workbench. Вы также можете вызвать хранимую процедуру и задать глобальные или часовые пояса уровня сеанса с помощью портал Azure или Azure CLI.
binlog_expire_logs_seconds
В База данных Azure для MySQL — гибкий сервер binlog_expire_logs_seconds
параметр указывает количество секунд, которое служба ожидает перед удалением двоичного файла журнала.
Двоичный журнал содержит события с описанием изменений в базе данных, таких как операции создания таблицы или изменения данных таблицы. Двоичный журнал также содержит события для инструкций, которые потенциально могли бы вносить изменения. Двоичный журнал используется главным образом для двух целей: репликации и операций восстановления данных.
Как правило, двоичные журналы удаляются, как только дескриптор свободен от службы, резервного копирования или набора реплик. Если существует несколько реплик, двоичные журналы ожидают, пока самая медленная реплика будет считывать изменения до их удаления.
Если вы хотите сохранить двоичные журналы в течение длительного времени, можно настроить binlog_expire_logs_seconds
параметр. Если binlog_expire_logs_seconds
задано значение 0
по умолчанию, двоичный журнал удаляется сразу после освобождения дескриптора. Если значение binlog_expire_logs_seconds
больше 0
, двоичный журнал удаляется после заданного количества секунд.
База данных Azure для MySQL — гибкий сервер обрабатывает управляемые функции, такие как резервное копирование и удаление реплики чтения двоичных файлов, внутренне. При репликации данных из База данных Azure для MySQL — гибкий сервер этот параметр необходимо задать в основном, чтобы избежать удаления двоичных журналов, прежде чем реплика считывает изменения в основном сервере. Если задано binlog_expire_logs_seconds
более высокое значение, двоичные журналы не будут удалены в ближайшее время. Эта задержка может привести к увеличению выставления счетов за хранение.
event_scheduler
В База данных Azure для MySQL — гибкий сервер, event_scheduler
параметр сервера управляет созданием, планированием и выполнением событий. То есть параметр управляет задачами, выполняемыми в соответствии с расписанием специальным потоком планировщика событий MySQL. event_scheduler
Если для параметра задано значениеON
, поток планировщика событий отображается как процесс управляющей программы в выходных SHOW PROCESSLIST
данных.
Вы можете создавать и планировать события с помощью следующего синтаксиса SQL:
CREATE EVENT <event name>
ON SCHEDULE EVERY _ MINUTE / HOUR / DAY
STARTS TIMESTAMP / CURRENT_TIMESTAMP
ENDS TIMESTAMP / CURRENT_TIMESTAMP + INTERVAL 1 MINUTE / HOUR / DAY
COMMENT '<comment>'
DO
<your statement>;
Дополнительные сведения о создании события см. в следующей документации по планировщику событий в руководстве по MySQL:
Настройка параметра сервера event_scheduler
В следующем сценарии показан один из способов использования event_scheduler
параметра в База данных Azure для MySQL — гибкий сервер.
Чтобы продемонстрировать сценарий, рассмотрим следующий пример простой таблицы:
mysql> describe tab1;
+-----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| CreatedAt | timestamp | YES | | NULL | |
| CreatedBy | varchar(16) | YES | | NULL | |
+-----------+-------------+------+-----+---------+----------------+
3 rows in set (0.23 sec)
Чтобы настроить параметр сервера в База данных Azure для MySQL — гибкий event_scheduler
сервер, выполните следующие действия:
В портал Azure перейдите к экземпляру гибкого сервера База данных Azure для MySQL. В разделе Параметры выберите Параметры сервера.
На панели параметров сервера найдите
event_scheduler
. В раскрывающемся списке VALUE выберите ON и нажмите кнопку "Сохранить".Примечание.
Развертывание динамической конфигурации для параметра сервера не требует перезагрузки.
Чтобы создать событие, подключитесь к экземпляру гибкого сервера База данных Azure для MySQL и выполните следующую команду SQL:
CREATE EVENT test_event_01 ON SCHEDULE EVERY 1 MINUTE STARTS CURRENT_TIMESTAMP ENDS CURRENT_TIMESTAMP + INTERVAL 1 HOUR COMMENT 'Inserting record into the table tab1 with current timestamp' DO INSERT INTO tab1(id,createdAt,createdBy) VALUES('',NOW(),CURRENT_USER());
Чтобы просмотреть сведения о планировщике событий, выполните следующую инструкцию SQL:
SHOW EVENTS;
Отображаются следующие результаты:
mysql> show events; +-----+---------------+-------------+-----------+-----------+------------+----------------+----------------+---------------------+---------------------+---------+------------+----------------------+----------------------+--------------------+ | Db | Name | Definer | Time zone | Type | Execute at | Interval value | Interval field | Starts | Ends | Status | Originator | character_set_client | collation_connection | Database Collation | +-----+---------------+-------------+-----------+-----------+------------+----------------+----------------+---------------------+---------------------+---------+------------+----------------------+----------------------+--------------------+ | db1 | test_event_01 | azureuser@% | SYSTEM | RECURRING | NULL | 1 | MINUTE | 2023-04-05 14:47:04 | 2023-04-05 15:47:04 | ENABLED | 3221153808 | latin1 | latin1_swedish_ci | latin1_swedish_ci | +-----+---------------+-------------+-----------+-----------+------------+----------------+----------------+---------------------+---------------------+---------+------------+----------------------+----------------------+--------------------+ 1 row in set (0.23 sec)
Через несколько минут запросите строки из таблицы, чтобы начать просмотр строк, вставляемых каждую минуту в соответствии с настроенным параметром
event_scheduler
:mysql> select * from tab1; +----+---------------------+-------------+ | id | CreatedAt | CreatedBy | +----+---------------------+-------------+ | 1 | 2023-04-05 14:47:04 | azureuser@% | | 2 | 2023-04-05 14:48:04 | azureuser@% | | 3 | 2023-04-05 14:49:04 | azureuser@% | | 4 | 2023-04-05 14:50:04 | azureuser@% | +----+---------------------+-------------+ 4 rows in set (0.23 sec)
Через час выполните
select
инструкцию в таблице, чтобы просмотреть полный результат значений, вставленных в таблицу каждую минуту в течение часа (какevent_scheduler
показано в этом случае):mysql> select * from tab1; +----+---------------------+-------------+ | id | CreatedAt | CreatedBy | +----+---------------------+-------------+ | 1 | 2023-04-05 14:47:04 | azureuser@% | | 2 | 2023-04-05 14:48:04 | azureuser@% | | 3 | 2023-04-05 14:49:04 | azureuser@% | | 4 | 2023-04-05 14:50:04 | azureuser@% | | 5 | 2023-04-05 14:51:04 | azureuser@% | | 6 | 2023-04-05 14:52:04 | azureuser@% | ..< 50 lines trimmed to compact output >.. | 56 | 2023-04-05 15:42:04 | azureuser@% | | 57 | 2023-04-05 15:43:04 | azureuser@% | | 58 | 2023-04-05 15:44:04 | azureuser@% | | 59 | 2023-04-05 15:45:04 | azureuser@% | | 60 | 2023-04-05 15:46:04 | azureuser@% | | 61 | 2023-04-05 15:47:04 | azureuser@% | +----+---------------------+-------------+ 61 rows in set (0.23 sec)
Другие сценарии
Событие можно настроить на основе требований конкретного сценария. Ниже приведены несколько примеров планирования инструкций SQL для выполнения с различными интервалами времени.
Чтобы запустить инструкцию SQL сейчас и повторять один раз в день без конца:
CREATE EVENT <event name>
ON SCHEDULE
EVERY 1 DAY
STARTS (TIMESTAMP(CURRENT_DATE) + INTERVAL 1 DAY + INTERVAL 1 HOUR)
COMMENT 'Comment'
DO
<your statement>;
Выполнение инструкции SQL каждый час без конца:
CREATE EVENT <event name>
ON SCHEDULE
EVERY 1 HOUR
COMMENT 'Comment'
DO
<your statement>;
Для выполнения инструкции SQL каждый день без конца:
CREATE EVENT <event name>
ON SCHEDULE
EVERY 1 DAY
STARTS str_to_date( date_format(now(), '%Y%m%d 0200'), '%Y%m%d %H%i' ) + INTERVAL 1 DAY
COMMENT 'Comment'
DO
<your statement>;
Ограничения
Для серверов с высокой доступностью, настроенных при отработки отказа, возможно event_scheduler
, что для параметра сервера задано значение OFF
. Если это происходит, когда отработка отказа завершена, настройте параметр, чтобы задать значение ON
.
Параметры сервера, не изменяемые
В области параметров сервера в портал Azure отображаются изменяемые и неизменяемые параметры сервера. Неизменяемые параметры сервера недоступны. Параметр сервера без изменения можно настроить на уровне сеанса с помощью init_connect
портал Azure или Azure CLI.