次の方法で共有


Azure Database for MySQL - フレキシブル サーバーのサーバー パラメーター

この記事では、Azure Database for MySQL - フレキシブル サーバーでサーバー パラメーターを構成するための考慮事項とガイドラインを示します。

Note

この記事には、Microsoft では現在使用されていなくなった "スレーブ" という用語への言及が含まれています。 ソフトウェアからこの用語が削除された時点で、この記事から削除します。

サーバー パラメーターとは

MySQL エンジンには、エンジンの動作を構成および調整するために使用する、さまざまなサーバー パラメーター ("変数" とも呼ばれます) が用意されています。 一部のパラメーターは、実行時に動的に設定できます。 一方で静的なパラメーターもあり、それらは設定後にサーバーを再起動する必要があります。

Azure Database for MySQL - フレキシブル サーバーでは、「Azure portal を使用して Azure Database for MySQL - フレキシブル サーバーのサーバー パラメーターを構成する」および「Azure CLI を使用して Azure Database for MySQL - フレキシブル サーバーのサーバー パラメーターを構成する」を使用して、さまざまな MySQL のサーバー パラメーターを変更し、ワークロードのニーズに合うようにできます。

構成可能なサーバー パラメーター

サーバー パラメーターを使用して Azure Database for MySQL フレキシブル サーバーの構成を管理できます。 このサーバー パラメーターは、サーバーの作成時に既定値と推奨値を使用して構成されます。 Azure portal の [サーバー パラメーター] ペインには、変更可能および変更不可の両方のパラメーターが表示されます。 変更不可のサーバー パラメーターは選択できません。

サポートされるサーバー パラメーターの一覧は、拡大を続けています。 Azure portal を使用して、サーバー パラメーターの完全な一覧を定期的に表示し、値を構成できます。

ポータルを使用して静的サーバー パラメーターを変更する場合、変更を有効にするためにサーバーを再起動する必要があります。 Azure Resource Manager テンプレート、Terraform、Azure CLI などのツールを使用して自動化スクリプトを使用する場合、作成エクスペリエンスの一部として構成を変更する場合でも、設定を有効にするためにサービスを再起動するプロビジョニングをスクリプトに含める必要があります。

お使いの環境に合わせて変更不可のサーバー パラメーターを変更する場合は、コミュニティ フィードバックからアイデアを投稿するか、フィードバックが既に存在する場合は投票してください。これは Microsoft が優先順位を付けるのに役立ちます。

以降のセクションでは、一般的に更新されるサーバー パラメーターの制限について説明します。 制限は、サーバーのコンピューティング レベルとサイズ (仮想コア) によって決まります。

lower_case_table_names

MySQL バージョン 5.7 の場合、Azure Database for MySQL - フレキシブル サーバーでは、lower_case_table_names の既定値は 1 です。 サポートされている値を 2 に変更することはできますが、2 から 1 に戻すことはできません。 既定値の変更については、サポート チケットを作成してください。

MySQL バージョン 8.0 以降では、サーバーを初期化する場合にのみ lower_case_table_names を構成できます。 詳細情報。 サーバーの初期化後に lower_case_table_names 設定を変更することは禁止されています。

Azure Database for MySQL - フレキシブル サーバーでは、MySQL バージョン 8.0 でサポートされている値は 12 です。 既定値は 1 です。 サーバー作成時の既定値の変更については、サポート チケットを作成してください。

innodb_tmpdir

Azure Database for MySQL - フレキシブル サーバーの innodb_tmpdir パラメーターを使用して、再構築するオンライン ALTER TABLE 操作中に作成された一時的な並べ替えファイルのディレクトリを定義します。

innodb_tmpdir の既定値は /mnt/tempです。 この場所は一時ストレージ SSD に対応し、各サーバーのコンピューティング サイズ (ギガバイト単位 (GiB)) で使用できます。 この場所は、大量の領域を必要としない操作に最適です。

より多くの領域が必要な場合は、innodb_tmpdir/app/work/tmpdir に設定できます。 この設定では、Azure Database for MySQL フレキシブル サーバーで使用可能なストレージ容量を利用します。 この設定は、より多くの一時ストレージを必要とする大規模な操作に役立ちます。

/app/work/tmpdir を使用すると、既定の一時ストレージ (SSD)/mnt/temp 値と比較してパフォーマンスが低下するのでご注意ください。 操作の特定の要件に基づいて選択してください。

innodb_tmpdir に対して提供される情報は、パラメーター innodb_temp_tablespaces_dirtmpdir、および slave_load_tmpdir に適用できます。

  • 既定値 /mnt/temp は共通です。
  • 代替ディレクトリ /app/work/tmpdir は、一時ストレージの増加を構成するために使用でき、特定の運用要件に基づくパフォーマンスのトレードオフがあります。

log_bin_trust_function_creators

Azure Database for MySQL - フレキシブル サーバーの場合、バイナリ ログは常に有効になっています (つまり、log_binON に設定されています)。 log_bin_trust_function_creators パラメーターは、フレキシブル サーバーでは既定で ON に設定されます。

バイナリ ログ形式は常にROW であり、サーバーへの接続では常に行ベースのバイナリ ログが使用されます。 行ベースのバイナリ ログを使用すると、セキュリティ上の問題が存在せず、バイナリ ログを中断できないため、安全に log_bin_trust_function_creatorsON のままにしておくことができます。

log_bin_trust_function_creatorsOFF に設定されている場合、トリガーの作成を試みると、"SUPER 特権を持っておらず、バイナリ ログが有効になっています (より安全度の低い log_bin_trust_function_creators 変数を使用することもできます)" のようなエラーが表示されます。

innodb_buffer_pool_size

innodb_buffer_pool_size パラメーターの詳細については、MySQL のドキュメントを参照してください。

次の表の物理メモリ サイズは、Azure Database for MySQL フレキシブル サーバーで使用可能なランダム アクセス メモリ (RAM) をギガバイト (GB) 単位で表したものです。

価格レベル 仮想コア 物理メモリ サイズ (GB) 既定値 (バイト) 最小値 (バイト) 最大値 (バイト)
バースト可能 (B1s) 1 1 134217728 33554432 268435456
バースト可能 (B1ms) 1 2 536870912 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
General Purpose 4 16 12884901888 134217728 12884901888
General Purpose 8 32 25769803776 134217728 25769803776
General Purpose 16 64 51539607552 134217728 51539607552
General Purpose 32 128 103079215104 134217728 103079215104
General Purpose 48 192 154618822656 134217728 154618822656
General Purpose 64 256 206158430208 134217728 206158430208
Business Critical 2 16 12884901888 134217728 12884901888
Business Critical 4 32 25769803776 134217728 25769803776
Business Critical 8 64 51539607552 134217728 51539607552
Business Critical 16 128 103079215104 134217728 103079215104
Business Critical 20 160 128849018880 134217728 128849018880
Business Critical 32 256 206158430208 134217728 206158430208
Business Critical 48 384 309237645312 134217728 309237645312
Business Critical 64 504 405874409472 134217728 405874409472

innodb_file_per_table

MySQL では、テーブルの作成時に指定した構成に基づいて、InnoDB テーブルが異なるテーブルスペースに格納されます。 システム テーブルスペースは、InnoDB データ辞書のストレージ領域です。 file-per-table テーブルスペースは、1 つの InnoDB テーブルに対するデータとインデックスを含み、固有のデータ ファイル内のファイル システムに格納されています。 innodb_file_per_table サーバー パラメーターは、この動作を制御します。

innodb_file_per_tableOFF に設定すると、InnoDB ではシステム テーブルスペースにテーブルが作成されます。 それ以外の場合、InnoDB では file-per-table テーブルスペースにテーブルが作成されます。

Azure Database for MySQL - フレキシブル サーバーは、1 つのデータ ファイル内で、最大 8 テラバイト (TB) までをサポートしています。 データベースのサイズが 8 TB を超える場合は、innodb_file_per_table テーブルスペースにテーブルを作成する必要があります。 1 つのテーブル サイズが 8 TB を超える場合は、パーティション テーブルを使用する必要があります。

innodb_log_file_size

innodb_log_file_size の値は、ログ グループ内の各ログ ファイルのサイズ (バイト単位) です。 ログ ファイルの合計サイズ (innodb_log_file_size * innodb_log_files_in_group) は、最大値 (512 GB 弱) を超えることはできません。

ログ ファイルのサイズを大きくすると、パフォーマンスが向上しますが、クラッシュ後の復旧時間が長くなるという欠点があります。 まれに発生するクラッシュ後の復旧時間と、ピーク操作中のスループットの最大化との間でバランスを取る必要があります。 ログ ファイルのサイズを大きくすると、再起動時間が長くなることもあります。

Azure Database for MySQL - フレキシブル サーバーでは、innodb_log_size を 256 メガバイト (MB)、512 MB、1 GB、2 GB のいずれかの値に構成できます。 このパラメーターは静的であり、再起動が必要です。

Note

innodb_log_file_size パラメーターを既定値から変更した場合は、再起動の遅延を回避するために、show global status like 'innodb_buffer_pool_pages_dirty' の値が 30 秒間 0 にとどまっているかどうかを確認します。

max_connections

サーバーのメモリ サイズによって max_connections の値が決まります。 次の表の物理メモリ サイズは、Azure Database for MySQL フレキシブル サーバーで使用可能な RAM をギガバイト単位で表したものです。

価格レベル 仮想コア 物理メモリ サイズ (GB) 規定値 最小値 最大値
バースト可能 (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
General Purpose 4 16 1365 10 2731
General Purpose 8 32 2731 10 5461
General Purpose 16 64 5461 10 10923
General Purpose 32 128 10923 10 21845
General Purpose 48 192 16384 10 32768
General Purpose 64 256 21845 10 43691
Business Critical 2 16 1365 10 2731
Business Critical 4 32 2731 10 5461
Business Critical 8 64 5461 10 10923
Business Critical 16 128 10923 10 21845
Business Critical 20 160 13653 10 27306
Business Critical 32 256 21845 10 43691
Business Critical 48 384 32768 10 65536
Business Critical 64 504 43008 10 86016

接続数が制限を超えると、"エラー 1040 (08004): 接続が多すぎます" というエラーが表示される場合があります。

新しいクライアント接続を MySQL に作成すると、時間がかかります。 これらの接続を確立すると、アイドル状態であっても、データベース リソースが占有されます。 ほとんどのアプリケーションでは、短時間の接続を多数要求します。これにより、この状況が悪化します。 結果として、実際のワークロードに使用できるリソースが少なくなるため、パフォーマンスが低下します。

アイドル状態の接続を減らして既存の接続を再利用する接続プーラーは、この問題を回避するのに役立ちます。 最適なエクスペリエンスを得るために、ProxySQL のような接続プーラーを使用して、接続を効率的に管理することをお勧めします。 ProxySQL の設定については、ブログ投稿を参照してください。

Note

ProxySQL はオープンソースのコミュニティ ツールです。 Microsoft は、ベスト エフォート方式でサポートします。 信頼のあるガイダンスでの運用サポートを受けるには、ProxySQL 製品サポートにお問い合わせください。

innodb_strict_mode

"行のサイズが大きすぎます (> 8126)" などのエラーが表示された場合は、innodb_strict_mode サーバー パラメーターをオフにすることができます。 このパラメーターをサーバー レベルでグローバルに変更することはできません。行データのサイズが 8K を超える場合、エラーが表示されずにデータが切り捨てられるためです。 この切り捨てによって、データが失われる可能性があります。 ページ サイズの制限に合うようにスキーマを変更することをお勧めします。

このパラメーターは、init_connect を使用してセッション レベルで設定できます。 詳細については、変更不可のサーバー パラメーターの設定に関する記事を参照してください。

Note

読み取りレプリカ サーバーがある場合、ソース サーバーのセッション レベルで innodb_strict_modeOFF に設定すると、レプリケーションが中断されます。 読み取りレプリカがある場合、このパラメーターは ON に設定したままにすることをお勧めします。

time_zone

初期デプロイの時点で、Azure Database for MySQL - フレキシブル サーバー インスタンスにはタイム ゾーン情報のシステム テーブルが含まれていますが、これらのテーブルには値が設定されていません。 タイム ゾーン テーブルには、MySQL コマンド ラインや MySQL Workbench などのツールから mysql.az_load_timezone ストアド プロシージャを呼び出すことでデータを入力できます。 Azure portal または Azure CLI を使用して、ストアド プロシージャを呼び出し、グローバル レベルまたはセッション レベルのタイム ゾーンを設定できます。

binlog_expire_logs_seconds

Azure Database for MySQL - フレキシブル サーバーでは、binlog_expire_logs_seconds パラメーターは、サービスがバイナリ ログ ファイルを削除するまでに待機する秒数を指定します。

"バイナリ ログ" には、テーブルの作成操作やテーブル データの変更など、データベースの変更を示すイベントが含まれます。 バイナリ ログには、変更を加えた可能性のあるステートメントのイベントも含まれます。 バイナリ ログは、主にレプリケーション操作とデータの復旧操作の 2 つの目的で使用されます。

通常、バイナリ ログは、ハンドルがサービス、バックアップ、またはレプリカ セットから解放されるとすぐに削除されます。 レプリカが複数ある場合、バイナリ ログは、最も遅いレプリカが変更を読み取るまで待機してから削除されます。

バイナリ ログを長く保持する場合は、binlog_expire_logs_seconds パラメーターを構成できます。 binlog_expire_logs_seconds が既定値の 0 に設定されている場合、バイナリ ログは、そのハンドルが解放されるとただちに削除されます。 binlog_expire_logs_seconds の値が 0 より大きい場合、バイナリ ログは構成された秒数後に削除されます。

Azure Database for MySQL - フレキシブル サーバーは、バイナリ ファイルのバックアップや読み取りレプリカの削除などのマネージド機能を内部で処理します。 Azure Database for MySQL - フレキシブル サーバーからデータ出力をレプリケートする場合は、レプリカがプライマリの変更内容を読み取る前にバイナリ ログが削除されるのを防ぐために、プライマリでこのパラメーターを設定する必要があります。 binlog_expire_logs_seconds を大きい値に設定すると、バイナリ ログはすぐには削除されなくなります。 それにより、ストレージの課金が増加する場合があります。

event_scheduler

Azure Database for MySQL - フレキシブル サーバーでは、event_scheduler サーバー パラメーターによって、イベントの作成、スケジュール設定、実行が管理されます。 つまり、パラメーターは、特別な MySQL イベントスケジューラ スレッドによってスケジュールに従って実行されるタスクを管理します。 event_scheduler パラメーターが ON に設定されている場合、イベントスケジューラ スレッドは SHOW PROCESSLIST の出力にデーモン プロセスとして一覧表示されます。

event_scheduler - MySQL バージョン 5.7 サーバーの場合、バックアップが開始されると、サーバー パラメーター event_scheduler は自動的に 'OFF' になり、バックアップが正常に完了した後、サーバー パラメーター event_scheduler は 'ON' に戻ります。 Azure Database for MySQL - フレキシブル サーバーの MySQL バージョン 8.0 では、event_scheduler はバックアップ中に影響を受けません。 よりスムーズな操作を実現するために、メジャー バージョンのアップグレードを使用して、MySQL 5.7 サーバーをバージョン 8.0 にアップグレードすることをお勧めします。

次の 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 サーバー パラメーターの構成

次のシナリオは、Azure Database for MySQL - フレキシブル サーバーで event_scheduler パラメーターを使用する 1 つの方法を示しています。

シナリオを説明するために、次の単純なテーブルの例を考えてみましょう。

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) |
| ``` |
| To configure the `event_scheduler` server parameter in Azure Database for MySQL - Flexible Server, perform the following steps: |

1. In the Azure portal, go to your Azure Database for MySQL - Flexible Server instance. Under **Settings**, select **Server parameters**.
1. On the **Server parameters** pane, search for `event_scheduler`. In the **VALUE** dropdown list, select **ON**, and then select **Save**.

    > [!NOTE]
    > Deployment of the dynamic configuration change to the server parameter doesn't require a restart.

1. To create an event, connect to the Azure Database for MySQL - Flexible Server instance and run the following SQL command:
    ```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());

    ```
1. To view the Event Scheduler details, run the following SQL statement:
    ```sql

    SHOW EVENTS;

    ```
    The following output appears:
    ```sql

    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) |
    | ``` |

1. After a few minutes, query the rows from the table to begin viewing the rows inserted every minute according to the `event_scheduler` parameter that you configured:

    ```azurecli
    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) |
    | ``` |
| 1. After an hour, run a `select` statement on the table to view the complete result of the values inserted into table every minute for an hour (as `event_scheduler` is configured in this case): |
    ```azurecli

    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) |
    | ``` |

#### Other scenarios

You can set up an event based on the requirements of your specific scenario. A few examples of scheduling SQL statements to run at various time intervals follow.

To run a SQL statement now and repeat one time per day with no end:

```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>;

1 時間ごとに SQL ステートメントを実行し、終了時間は設定しません。

CREATE EVENT <event name>
ON SCHEDULE
EVERY 1 HOUR
COMMENT 'Comment'
DO
<your statement>;

1 日ごとに 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 portal の [サーバー パラメーター] ペインには、変更可能および変更不可のサーバー パラメーターの両方が表示されます。 変更不可のサーバー パラメーターは選択できません。 Azure portal または Azure CLIinit_connect を使用し、セッション レベルで変更不可のサーバー パラメーターを構成できます。