このトピックでは、変数の管理方法と使用方法について説明します。 また、タイムゾーン変数の設定方法についても説明します。このトピックは、ビジネス要件に合わせて ApsaraDB for SelectDBApsaraDB for SelectDB の変数をより効果的に使用するために役立ちます。
変数
ApsaraDB for SelectDB の変数は、ApsaraDB for SelectDB 固有の変数と、MySQL クライアントプロトコルと互換性のある変数に分けられます。詳細については、「付録」をご参照ください。
変数のクエリと設定
変数のクエリ
SHOW VARIABLES [LIKE 'xxx']; 文を実行して、すべてまたは指定された変数をクエリできます。サンプルコード:
SHOW VARIABLES;
SHOW VARIABLES LIKE '%time_zone%';変数の設定
グローバル変数を設定できます。グローバル変数はグローバルに有効になります。また、セッション変数を設定することもできます。セッション変数は現在のセッションに対してのみ有効になります。
セッション変数: 現在のセッションに対してのみ有効になる変数を設定する場合、SET var_name=xxx; 文を実行できます。サンプルコード:
SET exec_mem_limit = 137438953472;
SET forward_to_master = true;
SET time_zone = "Asia/Shanghai";グローバル変数: グローバルに有効になる変数を設定する場合、SET GLOBAL var_name=xxx; 文を実行できます。グローバル変数が有効になると、設定された値が現在および後続のセッションで使用されます。サンプルコード:
SET GLOBAL exec_mem_limit = 137438953472管理者ユーザーのみがグローバル変数を設定できます。
次の変数は、グローバルに有効になるように設定することも、現在のセッションに対してのみ有効になるように設定することもできます。
time_zonewait_timeoutsql_modeenable_profilequery_timeoutinsert_timeoutexec_mem_limitbatch_sizeallow_partition_column_nullableinsert_visible_timeout_msenable_fold_constant_by_be
次の変数は、グローバルにのみ有効になるように設定できます。
default_rowset_typedefault_password_lifetimepassword_historyvalidate_password_policy
さらに、定数式を使用して変数を設定することもできます。サンプルコード:
SET exec_mem_limit = 10 * 1024 * 1024 * 1024;
SET forward_to_master = concat('tr', 'u', 'e');クエリ文での変数の設定
シナリオによっては、特定のクエリに対して変数を設定する必要がある場合があります。 SET_VAR ヒントを使用して、クエリでセッション変数を設定できます。設定された変数は、単一の文に対してのみ有効になります。サンプルコード:
SELECT /*+ SET_VAR(exec_mem_limit = 8589934592) */ name FROM people ORDER BY name;
SELECT /*+ SET_VAR(query_timeout = 1, enable_partition_cache=true) */ sleep(3);コメントは /*+ で始まり、SELECT 文に従う必要があります。
タイムゾーン変数
重要な変数の種類であるタイムゾーン変数は、ApsaraDB for SelectDB の多くの関数と変数の値に影響します。さまざまな地域のさまざまなビジネス要件を満たすために、ApsaraDB for SelectDB はカスタムタイムゾーン設定をサポートしています。
ApsaraDB for SelectDB は、次の 2 つのタイムゾーン変数を提供します。
system_time_zone: クラスタのシステムタイムゾーン。サーバーの起動時に、この変数はサーバーのタイムゾーンに基づいて自動的に設定されます。設定されたタイムゾーンは変更できません。time_zone: クラスタの現在のタイムゾーン。このタイムゾーンは変更できます。
タイムゾーン変数のクエリと設定
タイムゾーン変数をクエリします。サンプルコード:
SHOW variables LIKE '%time_zone%'セッションのタイムゾーンを設定します。サンプルコード:
SET [GLOBAL] time_zone = 'Asia/Shanghai'GLOBAL キーワードを使用すると、設定されたタイムゾーンは、現在の ApsaraDB for SelectDB クラスタの後続のすべてのセッションにも有効になります。
タイムゾーン形式
タイムゾーン変数の値は複数の形式で指定できます。 ApsaraDB for SelectDB は、次の標準形式をサポートしています。
Asia/Shanghai、America/Los_Angeles などの標準の名前付き形式。
+02:30、-10:00 などの標準のオフセット形式。
省略形。次の形式がサポートされています。
グリニッジ標準時 (GMT) と協定世界時 (UTC)。これらは +00:00 タイムゾーンに相当します。
中部標準時 (CST)。これは Asia/Shanghai タイムゾーンに相当します。
単一文字の Z。これは Zulu タイムゾーンを表し、+00:00 タイムゾーンに相当します。
さまざまなデータインポート方法の実装により、特定のデータインポート方法が使用されている場合、ApsaraDB for SelectDB は他のタイムゾーン形式をサポートする場合があります。本番環境では他のタイムゾーン形式に依存しないことをお勧めします。 ApsaraDB for SelectDB は、他のタイムゾーン形式の処理方法をいつでも変更する場合があります。
タイムゾーン設定の影響
関数
タイムゾーン設定は、NOW() や CURTIME() などの時間関数によって返される値に影響し、SHOW LOAD 文と SHOW BACKENDS 文の時間値にも影響します。ただし、タイムゾーン設定は、CREATE TABLE 文の時間型パーティションキー列の less than 値には影響せず、DATE 型または DATETIME 型として格納された値の表示にも影響しません。
次の関数はタイムゾーン設定の影響を受けます。
FROM_UNIXTIME: 指定された UTC タイムスタンプに基づいて、指定されたタイムゾーンの日付と時刻を返します。 CST タイムゾーンを使用する場合、FROM_UNIXTIME(0)は1970-01-01 08:00:00を返します。UNIX_TIMESTAMP: 指定されたタイムゾーンの指定された日付と時刻に基づいて、UTC タイムスタンプを返します。 CST タイムゾーンを使用する場合、UNIX_TIMESTAMP('1970-01-01 08:00:00')は0を返します。CURTIME: 指定されたタイムゾーンの現在の時刻を返します。NOW: 指定されたタイムゾーンの現在の日付と時刻を返します。CONVERT_TZ: 指定されたタイムゾーンの日付と時刻を別のタイムゾーンの日付と時刻に変換します。
時間型の値
DATE 型、DATEV2 型、DATETIME 型、または DATETIMEV2 型のデータをインポートする場合、ApsaraDB for SelectDB はタイムゾーン変換をサポートします。
データに 2020-12-12 12:12:12+08:00 などのタイムゾーンが含まれていて、ApsaraDB for SelectDB クラスタの現在のタイムゾーンが +00:00 の場合、インポートされたデータは 2020-12-12 04:12:12 に変換されます。
データに 2020-12-12 12:12:12 などのタイムゾーンが含まれていない場合、時刻は絶対時間と見なされ、インポートされたデータは変換されません。
夏時間
夏時間は本質的に名前付きタイムゾーンの実際の時間オフセットであり、特定の日付に変更されます。
たとえば、America/Los_Angeles タイムゾーンには、毎年 3 月から 11 月まで続く夏時間調整があります。 America/Los_Angeles タイムゾーンでは、3 月に夏時間が開始されると時間オフセットは -08:00 から -07:00 に変更され、11 月に夏時間が終了すると -07:00 から -08:00 に変更されます。
夏時間を使用しない場合は、time_zone 変数を America/Los_Angeles ではなく -08:00 に設定する必要があります。
データソース
タイムゾーンデータには、タイムゾーンの名前、時間オフセット、夏時間の変更が含まれています。バックエンド (BE) ノードがデプロイされているマシンでは、タイムゾーンデータは次のデータソースにあります。
TZDIRコマンドによって返されるディレクトリ。/usr/share/zoneinfoディレクトリ。ApsaraDB for SelectDB の BE デプロイディレクトリに生成された
zoneinfoディレクトリ。
ApsaraDB for SelectDB は、上記のデータソースを順番に検索してタイムゾーンデータを検索します。タイムゾーンデータが見つかった場合は、それが使用されます。タイムゾーンデータが見つからない場合、ApsaraDB for SelectDB の BE ノードは起動に失敗します。
ベストプラクティス
タイムゾーンに依存するデータ
ApsaraDB for SelectDB は、さまざまなタイムゾーンからインポートされたデータと互換性があります。タイムゾーン設定は、次の 3 つの要素の影響を受けます。
クラスタの現在のタイムゾーン。これは time_zone セッション変数によって設定されます。
Stream Load や Broker Load などの方法を使用してデータをインポートする際に、timezone ヘッダーによって設定されたタイムゾーン。
データのリテラルタイムゾーン。たとえば、
2023-12-12 08:00:00+08:00の+08:00など。
ApsaraDB for SelectDB では、DATETIME などの時間型のデータにはタイムゾーンが含まれていません。 ApsaraDB for SelectDB クラスタの時間型のデータは、絶対時間と特定のタイムゾーンの時刻の 2 つのカテゴリに分類できます。
絶対時間: データの時間形式にはタイムゾーンが含まれておらず、データのインポート時にタイムゾーンが指定されていません。例:
2023-12-12 08:00:00。データに関連付けられたシナリオは、タイムゾーンに依存しません。このカテゴリのデータがインポートされると、タイムゾーン設定の影響を受けません。このカテゴリのデータに基づいてUNIX_TIMESTAMPなどの関数を実行する場合、タイムゾーン情報は取得できません。また、time_zoneセッション変数を変更しても、このカテゴリのデータは影響を受けません。特定のタイムゾーンの時刻: データの時間形式にはタイムゾーンが含まれています。このカテゴリのデータがインポートされると、タイムゾーン設定の影響を受けます。例:
"2020-12-12 12:12:12+02:00"。データのインポート中に、ApsaraDB for SelectDB はタイムゾーン設定に基づいてこのカテゴリのデータを処理します。INSERT INTO文を使用してデータをインポートする場合、データは time_zone セッション変数の影響を受けます。Stream Load などの方法を使用してデータをインポートする場合、データは Stream Load の timezone ヘッダーの影響を受けます。 timezone ヘッダーの設定が time_zone セッション変数の設定と競合する場合、timezone ヘッダーの設定が優先されます。
特定のタイムゾーンとは、クラスタの現在のタイムゾーンを指し、time_zone セッション変数によって設定されます。この変数は、データがインポートされる前に設定され、それ以降は変更されません。このカテゴリのデータがインポートされると、ApsaraDB for SelectDB はインポートされるデータのリテラルタイムゾーンの時刻を、
time_zoneセッション変数によって設定されたタイムゾーンの時刻に変換します。
特定のタイムゾーンの時刻のベストプラクティスでは、time_zone セッション変数を変更しないことをお勧めします。次のサンプルコードは例を示しています。
mysql> SELECT@@time_zone;
+----------------+
| @@time_zone |
+----------------+
| Asia/Hong_Kong |
+----------------+
1 row in set (0.12 sec)
--- インポートされるデータのリテラルタイムゾーンは +02:00 です。
mysql> INSERT INTO dtv23 VALUES('2020-12-12 12:12:12+02:00');
Query OK, 1 row affected (0.27 sec)
mysql> SELECT* FROM dtv23;
--- インポートされたデータは、ApsaraDB for SelectDB クラスタの現在のタイムゾーンである Asia/Hong_Kong タイムゾーンの時刻に変換されます。このタイムゾーンは、後続のインポートとクエリにも使用されます。
+-------------------------+
| k0 |
+-------------------------+
| 2020-12-12 18:12:12.000 |
+-------------------------+
1 row in set (0.19 sec)
mysql> SET time_zone = 'America/Los_Angeles';
Query OK, 0 rows affected (0.15 sec)
mysql> SELECT* FROM dtv23;
--- time_zone セッション変数を変更すると、時間値はそれに応じて変更されませんが、その意味は設定されたタイムゾーンに基づいて変化します。これにより、後続のクエリで混乱が生じます。
+-------------------------+
| k0 |
+-------------------------+
| 2020-12-12 18:12:12.000 |
+-------------------------+
1 row in set (0.18 sec)
mysql> insert into dtv23 values('2020-12-12 12:12:12+02:00');
Query OK, 1 row affected (0.17 sec)
mysql> SELECT* FROM dtv23;
--- クエリ結果は正しくありません。
+-------------------------+
| k0 |
+-------------------------+
| 2020-12-12 02:12:12.000 |
| 2020-12-12 18:12:12.000 |
+-------------------------+
2 rows in set (0.19 sec)要約すると、タイムゾーン設定のベストプラクティスについては、次の項目に注意してください。
クラスタにデータをインポートする前に、クラスタの現在のタイムゾーンを確認し、ビジネス要件に基づいて
time_zoneセッション変数を設定します。データをインポートした後は、この変数を変更しないでください。データインポート方法を使用する場合は、
timezoneヘッダーの設定がtime_zoneセッション変数の設定と同じであることを確認してください。絶対時間の場合は、タイムゾーンサフィックスなしでデータをインポートします。特定のタイムゾーンの時刻の場合は、特定のタイムゾーンサフィックスを付けてデータをインポートします。 ApsaraDB for SelectDB は、特定のタイムゾーンの時刻を、
time_zoneセッション変数によって設定されたタイムゾーンの時刻に変換します。
夏時間
夏時間の開始時刻と終了時刻は、現在のタイムゾーンのデータソースに基づいており、現在の年のタイムゾーンの場所で公式に確認された時刻と完全に同じではない場合があります。タイムゾーンデータは、インターネットコーポレーションフォーアサインネームアンドナンバーズ (ICANN) によって管理されています。現在の年のタイムゾーンの場所で公式に確認された夏時間の開始時刻と終了時刻を使用する必要がある場合は、ApsaraDB for SelectDB によって選択されたデータソースに、ICANN によって公開された最新のタイムゾーンデータが含まれていることを確認してください。最新のタイムゾーンデータのダウンロード方法の詳細については、「参考文献」をご参照ください。
付録
サポートされている変数
ブール型の変数
このタイプの変数は、機能を有効または無効にするために使用されます。有効な値は true と false です。
変数 | 説明 |
delete_without_partition | DELETE 文を実行するときにパーティションを指定せずにデータを削除し、DELETE 操作をすべてのパーティションに自動的に適用するかどうかを指定します。デフォルト値: false。 重要 DELETE 操作がすべてのパーティションに自動的に適用されると、DELETE 文の期間が延長され、多数のタスクがトリガーされます。これにより、DELETE 操作の期間が延長されます。この機能を有効にしないことをお勧めします。 |
disable_colocate_join | コロケーション結合機能を無効にするかどうかを指定します。デフォルト値: false。 false の値は、機能が有効になっていることを指定します。true の値は、機能が無効になっていることを指定します。この機能が無効になっている場合、実行計画はコロケーション結合操作を実行しようとしません。 |
enable_bucket_shuffle_join | バケットシャッフル結合機能を有効にするかどうかを指定します。デフォルト値: true。 true の値は、機能が有効になっていることを指定します。false の値は、機能が無効になっていることを指定します。この機能が無効になっている場合、実行計画はバケットシャッフル結合操作を実行しようとしません。 |
disable_streaming_preaggregations | ストリーミング事前集計を無効にするかどうかを指定します。デフォルト値: false。 false の値は、機能が有効になっていることを指定します。この変数は変更できません。 |
enable_insert_strict | INSERT 文を使用してデータをインポートするときに false の値は、 |
enable_spilling | 大量のデータのソートを有効にするかどうかを指定します。デフォルト値: false。 false の値は、機能が無効になっていることを指定します。 この機能が有効になると、クエリのテンポラリデータは、BE データディレクトリの この機能は、限られたメモリを使用して大量のデータをソートするために使用されます。 重要 この機能は実験的なものです。本番環境では、この機能を有効にしないことをお勧めします。 |
forward_to_master | 一部の SHOW 文を実行するためにマスター フロントエンド (FE) ノードに転送するかどうかを指定します。デフォルト値: true の値は、機能が有効になっていることを指定します。ApsaraDB for SelectDB インスタンスには複数の FE ノードがあり、そのうちの 1 つがマスター FE ノードです。FE ノードのいずれかに接続して、フル機能の操作を実行できます。ただし、一部の SHOW 文を実行した後、マスター FE ノードからのみ詳細情報を取得できます。たとえば、 次の文をマスター FE ノードに転送すると、より詳細な情報が返されます。
|
enable_profile | クエリのプロファイルを表示するかどうかを指定します。デフォルト値: false。 false の値は、機能が無効になっていることを指定します。デフォルトでは、クエリでエラーが発生した場合にのみ、BE はクエリのプロファイルを FE に送信してエラーを表示します。これには特定量のネットワークオーバーヘッドが必要であり、高並列クエリの性能が低下します。したがって、BE は成功したクエリのプロファイルを FE に送信しません。 クエリのプロファイルを分析する場合は、クエリを実行する前にこの変数を true に設定できます。クエリが完了したら、現在接続されている FE ノードの Web ページで、次の URL を使用してプロファイルを表示できます。
Web ページには、 |
rewrite_count_distinct_to_bitmap_hll | ビットマップまたは HyperLogLog (HLL) 形式のデータについて、 |
allow_partition_column_nullable | テーブルを作成するときに、パーティションキー列を NULL として定義できるかどうかを指定します。デフォルト値: true。 true の値は、パーティションキー列を NULL として定義できることを指定します。false の値は、パーティションキー列を NOT NULL として定義する必要があることを指定します。 |
enable_exchange_node_parallel_merge | クエリのソートプロセス中に、exchange ノードが複数のスレッドを起動してデータを並列でマージするかどうかを指定します。これにより、追加の CPU とメモリの消費量が削減されます。デフォルト値: false。 結果がソートされるクエリでは、アップストリームノードがダウンストリームノードからデータを受信すると、最終データが順序付けられるように、exchange ノードでデータがソートされます。ただし、exchange ノードが単一のスレッドを起動して複数のダウンストリームノードから大量のデータをマージする場合、exchange ノードで単一のマージボトルネックが発生する可能性があります。 この問題を解決するために、ApsaraDB for SelectDB はマージプロセスを最適化します。アップストリームノードが複数のダウンストリームノードからデータを受信する場合、exchange ノードは複数のスレッドを起動してデータを並列でマージし、ソートプロセスを高速化します。 |
extract_wide_range_expr | 広範囲の共通因子を有効にするかどうかを指定します。デフォルト値: false。 |
enable_fold_constant_by_be | BE で定数畳み込みの計算を実行するかどうかを指定します。デフォルト値: false。 false の値は、計算が FE で実行されることを指定します。true の値は、リモートプロシージャコール (RPC) リクエストを使用して BE で計算が実行されることを指定します。 |
disable_join_reorder | すべての自動結合順序変更アルゴリズムを無効にするかどうかを指定します。デフォルト値: false。 false の値は、すべての自動結合順序変更アルゴリズムが有効になっていることを指定します。true の値は、すべての自動結合順序変更アルゴリズムが無効になっていることを指定します。この場合、JOIN 操作は SQL 文のテーブルの順序に基づいて実行されます。 |
enable_infer_predicate | 述語導出を実行するかどうかを指定します。デフォルト値: true。 true の値は、述語導出が実行されることを指定します。false の値は、ApsaraDB for SelectDB が述語導出を実行せず、元の述語を使用して関連操作を実行することを指定します。 |
trim_tailing_spaces_for_external_table_query | Hive 外部テーブルをクエリするときに、フィールドの末尾のスペースをトリミングするかどうかを指定します。デフォルト値: false。 |
enable_inverted_index_query | 転置インデックスを有効にするかどうかを指定します。デフォルト値: true。 |
skip_missing_version | 欠落バージョンを無視するかどうかを指定します。デフォルト値: false。 極端なシナリオでは、テーブル内のタブレットのすべてのレプリカでバージョンが欠落している場合があります。これらのタブレットは復元できません。その結果、テーブル全体をクエリできません。 この変数を使用して、クエリの動作を制御できます。この変数を true に設定すると、クエリは FE に記録されているタブレットの表示バージョンを無視し、代わりにレプリカバーションを使用します。BE のレプリカでバージョンが欠落している場合、クエリはこれらの欠落バージョンをスキップし、既存のバージョンのデータのみを返します。 さらに、クエリは常に、BE 上のすべての残存レプリカの中で最新の成功バージョンのレプリカを選択して、できるだけ多くのデータを復元しようとします。 クエリのテーブルデータを復元する必要がある緊急のシナリオでのみ、この変数を true に設定することをお勧めします。 重要 この変数は use_fix_replica 変数と競合します。この変数は、use_fix_replica 変数が -1 に設定されている場合にのみ有効になります。 |
enable_parquet_lazy_materialization | Parquet Reader の遅延マテリアライゼーション技術を有効にするかどうかを指定します。デフォルト値: true。 |
enable_orc_lazy_materialization | ORC Reader の遅延マテリアライゼーション技術を有効にするかどうかを指定します。デフォルト値: true。 |
enable_strong_consistency_read | データ読み取りの強い整合性を有効にするかどうかを指定します。デフォルト値: true。 デフォルトでは、ApsaraDB for SelectDB は同じセッション内での強い整合性をサポートしています。同じセッション内のデータの変更はリアルタイムで表示されます。セッション間でデータ読み取りの強い整合性を有効にする場合は、この変数を true に設定します。 |
truncate_char_or_varchar_columns | テーブルスキーマの最大長に基づいて CHAR 型または VARCHAR 型の列を切り捨てるかどうかを指定します。デフォルト値: false。 外部テーブルを使用してデータを管理する場合、テーブルのスキーマの CHAR 型または VARCHAR 型の列の最大長が、基になる Parquet ファイルまたは ORC ファイルのスキーマの最大長と一致しない場合があります。 この変数を true に設定すると、ApsaraDB for SelectDB はテーブルスキーマの最大長に基づいて CHAR 型または VARCHAR 型の列を切り捨てます。 |
jdbc_clickhouse_query_final | Java Database Connectivity ( JDBC ) カタログ機能を使用して ClickHouse データをクエリするときに、final キーワードを追加するかどうかを指定します。デフォルト値: false。 この変数は、ClickHouse の ReplacingMergeTree テーブルエンジンとともに重複を削除するために使用されます。 |
enable_memtable_on_sink_node | データインポート中にデータシンクノードのメモリテーブルを有効にするかどうかを指定します。デフォルト値: false。 この変数を true に設定すると、ApsaraDB for SelectDB はデータシンクノードにメモリテーブルを作成し、bRPC ストリーミングを使用してセグメントを他の BE ノードに送信します。これにより、レプリカ間の重複作業が削減され、データのシリアル化と逆シリアル化の時間が節約されます。 |
enable_unique_key_partial_update | INSERT INTO 文の部分列更新のセマンティクスを有効にするかどうかを指定します。有効な値:
重要
|
describe_extend_variant_column | テーブルをクエリするときに、VARIANT 型の列のサブ列を表示するかどうかを指定します。デフォルト値: false。 |
dry_run_query | クエリの結果の行数のみを返すかどうかを指定します。デフォルト値: false。 この変数を true に設定すると、ApsaraDB for SelectDB はクエリの実際の結果セットを返さなくなり、結果の行数のみを返します。データをインポートまたは挿入する場合、データシンクノードはデータを書き込む代わりにデータをドロップします。 この変数は、多数のデータセットをテストするときに結果セットの送信に必要な時間を回避するために使用できます。ApsaraDB for SelectDB は、基になるクエリの実行にのみ時間を費やします。 |
drop_table_if_ctas_failed |
|
show_user_default_role |
|
group_by_and_having_use_alias_first |
|
enable_file_cache | ブロックファイルキャッシュを有効にするかどうかを指定します。デフォルト値: false。 この変数は、BE ノードの be.conf ファイルで |
enable_auto_analyze | 自動統計収集機能を有効にするかどうかを指定します。デフォルト値: true。 |
enable_cost_based_join_reorder | JOIN 操作を実行するときに、結合順序変更を有効にしてテーブルの順序を自動的に調整するかどうかを指定します。 デフォルト値: false。 |
enable_fallback_to_original_planner | 新しいオプティマイザーが有効になった後、シナリオに基づいて古いオプティマイザーに自動的にフォールバックするかどうかを指定します。デフォルト値: false。 |
enable_odbc_transcation | JDBC カタログへのデータ書き込みのトランザクション機能を有効にするかどうかを指定します。デフォルト値: false。 |
enable_parallel_outfile | SELECT INTO OUTFILE 文の並列スキャンを有効にするかどうかを指定します。デフォルト値: false。 |
enable_sql_cache | SQL 文のキャッシュを有効にするかどうかを指定します。デフォルト値: false。 |
enable_unicode_name_support | Unicode 文字を含むテーブル名と列名をサポートするかどうかを指定します。デフォルト値: false。 この変数を true に設定すると、中国語の列名がサポートされます。 |
enable_vectorized_engine | ベクトル化エンジンを有効にしてクエリを高速化するかどうかを指定します。デフォルト値: true。 |
experimental_enable_nereids_planner | 新しいオプティマイザーを有効にするかどうかを指定します。この機能は実験的なものです。デフォルト値: true。 |
experimental_enable_pipeline_engine | パイプライン実行エンジンを有効にするかどうかを指定します。この機能は実験的なものです。デフォルト値: true。 |
experimental_enable_single_replica_insert | 単一レプリカインポート機能を有効にするかどうかを指定します。デフォルト値: false。 この変数を true に設定すると、ApsaraDB for SelectDB は複数のレプリカから 1 つのレプリカをプライマリレプリカとして選択し、プライマリレプリカでのみ計算を実行します。他のレプリカはセカンダリレプリカです。すべてのデータファイルがプライマリレプリカに書き込まれると、各セカンダリレプリカが存在するノードは、プライマリレプリカからデータファイルをプルできます。これにより、レプリカ間のデータが同期されます。 |
faster_float_convert | より高速な浮動小数点数変換アルゴリズムを有効にするかどうかを指定します。このアルゴリズムは出力形式に影響することに注意してください。デフォルト値: false。 |
enable_page_cache | ページレベルのキャッシュを有効にするかどうかを指定します。デフォルト値: true。 |
strict_mode | データインポートの strict モードを有効にするかどうかを指定します。デフォルト値: false。 |
BOOLEAN 型変数
この型の変数は、機能を有効または無効にするために使用されます。有効な値は true と false です。
変数 | 説明 |
delete_without_partition | JOIN 操作を実行するときに、すべてのノードにブロードキャストされるテーブルの最大バイト数のしきい値。 値 -1 は、ブロードキャスト機能が無効になっていることを指定します。 ApsaraDB for SelectDB は、
small テーブルに少量のデータが含まれている場合は、 ApsaraDB for SelectDB は、ブロードキャスト結合を自動的に使用しようとします。また、各結合演算子の実装方法を明示的に指定することもできます。 説明 この変数を使用して結合方法を変更することはお勧めしません。使用する結合方法を指定する場合は、join[shuffle] などのヒントを使用することをお勧めします。 |
batch_size | クエリ中に各ノードによって送信される単一パケットの行数。 デフォルトでは、パケットには 1,024 行が含まれています。ソースノードが 1,024 行のデータを生成するたびに、データはパッケージ化されて宛先ノードに送信されます。単一パケットの行数が多いほど、大量のデータがスキャンされるシナリオでのクエリの スループット が向上します。ただし、単一パケットの行数が多いと、少量のデータがクエリされるシナリオでのクエリの 待機時間 が長くなる可能性があります。これは、クエリの メモリ オーバーヘッドも増加させます。 この 変数 は 1,024 ~ 4,096 の 値 に設定することをお勧めします。 |
default_order_by_limit | ORDER BY 句を使用した後に返されるデータエントリのデフォルト数。 デフォルト値: -1。クエリ後に返されるデータエントリの最大数を指定します。上限は LONG 型のデータの最大値です。 |
exec_mem_limit | 1 つのクエリで使用される最大メモリ。デフォルトでは、1 つのクエリは最大 2 GB のメモリを使用できます。最大メモリは、バイト、KB、MB、GB、TB、または PB の単位で指定できます。単位を指定しない場合、デフォルトでバイトが使用されます。 この変数は、実行計画のフラグメントのインスタンスで使用できるメモリを制限するために使用されます。実行計画は複数のインスタンスに分割できます。1 つの BE ノードは 1 つ以上のインスタンスを実行できます。したがって、この変数は、クラスター内のクエリのメモリ使用量、または BE ノードでのクエリのメモリ使用量を正確に制限するものではありません。実際の制限は、生成された実行計画に基づいて決定されます。 ほとんどの場合、大量のメモリが消費されるのは、ソートノード、集計ノード、結合ノードなど、一部のブロッキングノード上のみです。ただし、スキャンノードなどの他のノードでは、データはストリーム配信されるため、大量のメモリを占有しません。
|
lower_case_table_names | テーブル名の大文字と小文字の区別。有効な値:
|
max_pushdown_conditions_per_column | クエリリクエストで、1 つの列に対してストレージエンジンにプッシュダウンできる条件の最大数です。詳細については、BE 設定項目 |
max_scan_key_num | スキャンノードがクエリリクエストで分割できるスキャンキーの最大数。詳細については、BE 設定項目 |
parallel_exchange_instance_num | 実行計画において、アップストリームノードがダウンストリームノードからデータを受信するために使用する exchange ノードの数。デフォルト値: -1 。これは、exchange ノードの数が、ダウンストリームノードで実行されるインスタンスの数と同じであることを指定します。 この変数を 0 より大きく、ダウンストリームノードで実行されるインスタンスの数より小さい値に設定すると、exchange ノードの数は変数の値と同じになります。 分散実行計画では、アップストリームノードは 1 つ以上の exchange ノードを使用して、異なるダウンストリーム BE ノードで実行されているインスタンスからデータを受信します。ほとんどの場合、exchange ノードの数は、ダウンストリームノードで実行されているインスタンスの数と同じです。 一部の集計クエリのシナリオでは、基盤レイヤーで大量のデータがスキャンされるものの、集計データの量が小さい場合は、この変数をより小さい値に設定してみてください。これにより、Duplicate key モデルに基づく集計クエリなど、集計クエリのリソースオーバーヘッドが削減されます。 |
analyze_timeout | ANALYZE 文のタイムアウト期間。単位:秒。デフォルト値:43200。 |
auto_analyze_end_time | 自動統計収集の終了時間です。 |
auto_analyze_start_time | 自動統計コレクションの開始時刻です。 |
auto_analyze_table_width_threshold | 自動統計収集が適用されるテーブルの最大列数です。テーブルの列数がこの制限を超えると、テーブルは自動統計収集に参加しません。デフォルト値:70 です。 |
div_precision_increment | / 演算子を使用した除算操作の結果のスケールを増やす桁数です。 デフォルト値:4 です。 |
external_agg_bytes_threshold | クエリにおける集約操作で使用される最大メモリです。 メモリ使用量がこの制限を超えると、メモリ内のデータは一時的にディスクに書き込まれます。 |
external_sort_bytes_threshold | クエリでのソート操作で使用される最大メモリです。 メモリ使用量がこの制限を超えると、メモリ内のデータは一時的にディスクに書き込まれます。 |
external_table_auto_analyze_interval_in_millis | 外部テーブルに対して自動統計収集が実行される最小間隔です。指定された間隔の間、外部テーブルに対して自動統計収集は 1 回だけ実行されます。単位:ミリ秒。デフォルト値:86400000。 |
fragment_transmission_compression_codec | データ転送中に使用する圧縮形式です。 デフォルト値: lz4。 |
enormous_table_auto_analyze_interval_in_millis | 大きなテーブルに対して自動統計収集が実行される最小間隔です。 指定された間隔中に、 |
enormous_table_default_sample_rows | 大きなテーブルに対してサンプリングする行数。デフォルト値:4194304。 |
enormous_table_lower_bound_size_in_bytes | 自動統計収集のためにサンプリングされるテーブルの最小サイズです。 テーブルのサイズがこのしきい値を超えると、自動統計収集中にテーブルがサンプリングされます。 デフォルト値:0。 |
ignore_runtime_filter_ids | 無視されるランタイム フィルター。 デフォルトでは、この変数は空です。 |
max_filter_ratio | 除外できるデータの最大比率。たとえば、データが標準に準拠していないために除外されます。デフォルト値:0。 |
max_instance_num |
|
parallel_pipeline_task_num | SQL クエリに対して同時に実行されるパイプラインタスクの数です。デフォルト値:0。 この変数を 0 に設定すると、ApsaraDB for SelectDB は各 BE ノードの CPU コア数を自動的に検出し、同時実行されるパイプラインタスクの数を CPU コア数の半分に設定します。これは、 |
runtime_filter_type | 使用するランタイム フィルターのタイプ。使用可能なランタイム フィルターは、Bloom フィルター、MinMax フィルター、IN 述語、IN または Bloom フィルター、およびビットマップ フィルターです。デフォルトでは、IN または Bloom フィルターが使用されます。場合によっては、Bloom フィルター、MinMax フィルター、および IN 述語を同時に使用すると、パフォーマンスが向上します。 |
runtime_filter_mode | ランタイムフィルターのプッシュダウンポリシー。OFF、LOCAL、および GLOBAL ポリシーを使用できます。デフォルトでは、GLOBAL ポリシーが使用されます。 |
runtime_filter_wait_time_ms | 左テーブルのスキャン ノードが各ランタイム フィルターを待機する時間。単位:ミリ秒。デフォルト値:1000。 |
runtime_filters_max_num | 各クエリで使用できるブルームフィルターの最大数。デフォルト値:10。 |
runtime_bloom_filter_min_size | Bloom フィルターの最小の長さです。単位:バイト。デフォルト値:1048576(1 MB)。 |
runtime_bloom_filter_max_size | Bloom フィルターの最大長。単位:バイト。デフォルト値:16777216(16 MB)。 |
runtime_bloom_filter_size | Bloom フィルターのデフォルトの長さです。単位:バイト。デフォルト値:2097152(2 MB を指定)。 |
runtime_filter_max_in_num | 右側のテーブルの最大行数。右側のテーブルの行数がこの制限を超えると、IN 述語は生成されません。デフォルト値:1024。 |
parallel_fragment_exec_instance_num | 各 BE ノードでスキャン範囲を処理するインスタンスの数です。デフォルト値:1。 実行計画では、スキャンするデータの範囲を指定するための一連のスキャン範囲が生成されます。データは複数の BE ノードに分散されます。BE ノードは 1 つ以上のスキャン範囲を持つ場合があります。デフォルトでは、各 BE ノード上の一連のスキャン範囲は 1 つのインスタンスによってのみ処理されます。マシンリソースが十分な場合は、この変数を変更して、より多くのインスタンスが各 BE ノード上の一連のスキャン範囲を処理できるようにすることができます。これにより、クエリの効率が向上します。 スキャン範囲を処理するインスタンスの数は、集計ノードや結合ノードなど、他のアップストリームノードの数を決定します。これは、実行計画の同時実行性も向上させます。この変数を変更することで、大規模なクエリの効率を向上させることができます。ただし、同時実行性を高めると、CPU、メモリ、ディスク I/O などのマシンリソースの消費量が増加します。 |
query_timeout | クエリのタイムアウト期間です。 この変数は、現在の接続におけるすべてのクエリ文に適用されます。 |
insert_timeout | INSERT 文のタイムアウト期間。この変数は INSERT 文にのみ適用されます。INSERT 文の実行に時間がかかる場合は、この変数を使用することをお勧めします。 単位:秒。デフォルト値:14400(4 時間)。 以前のバージョンでは、query_timeout 変数の値を増やすことで INSERT 文のタイムアウトを回避できました。以前のバージョンのユーザーの習慣との互換性を維持するために、 |
send_batch_parallelism |
|
sql_mode | SQL モード。さまざまな SQL 構文のスタイルとデータ検証の厳密さに対応できます。詳細については、「SQL モード」をご参照ください。 |
sql_select_limit | SELECT 文 (INSERT 文の SELECT 句を含む) によって返される行のデフォルト数。 デフォルトでは、制限は設定されていません。 |
time_zone | 現在のセッションのタイムゾーン。デフォルト値は、 |
wait_timeout | アイドル状態の接続のタイムアウト期間。アイドル状態の接続がタイムアウト期間内に ApsaraDB for SelectDB とやり取りしない場合、ApsaraDB for SelectDB は接続を閉じます。 単位:秒。デフォルト値:28800(8 時間)。 |
default_rowset_type | 計算ノード上のストレージエンジンのデフォルトのストレージフォーマットです。 有効な値: alpha および beta。デフォルト値: beta。 |
use_v2_rollup | クエリ時に Segment V2 ストレージフォーマットの ROLLUP インデックスを使用してデータを取得するかどうかを指定します。 この変数は、Segment V2 機能を使用する場合の検証に使用されます。それ以外の場合は、この変数を使用しないことをお勧めします。 |
prefer_join_method | ブロードキャストジョインのコストとシャッフルジョインのコストが等しい場合の、ブロードキャストジョインとシャッフルジョインの間の優先結合メソッドです。 有効な値: broadcast と shuffle です。 |
insert_visible_timeout_ms | INSERT 文のクエリ操作と挿入操作が完了した後、ApsaraDB for SelectDB がトランザクションのコミットとデータの可視化を待機するタイムアウト期間です。 デフォルト値:10000。最小値は 1000 です。 |
cpu_resource_limit | クエリの計算リソースのオーバーヘッド。この機能は試験段階です。 この変数は、シングルノードでのクエリの スキャン スレッド数を制限します。スキャン スレッド数が制限されると、基盤となるレイヤーは低速でデータを返します。このようにして、クエリの計算リソースのオーバーヘッド全体を制限できます。この変数を 2 に設定すると、クエリはシングルノードで最大 2 つの スキャン スレッドを使用できます。 この変数は、 この変数は、 デフォルト値:-1(制限なし)。 |
return_object_data_as_binary | SELECT 文の結果でビットマップ形式または HLL 形式のデータを返すかどうかを指定します。 SELECT INTO OUTFILE 文を実行した後、エクスポートされたファイルが CSV 形式の場合、ビットマップ形式または HLL 形式のデータは Base64 でエンコードされます。エクスポートされたファイルが Parquet 形式の場合、ビットマップ形式または HLL 形式のデータはバイト配列として保存されます。 次のサンプルコードは、Java の例を示しています。詳細については、「samples」をご参照ください。 |
block_encryption_mode | ブロック暗号化モード。デフォルト値:NULL。
有効な値: |
default_password_lifetime | パスワードのデフォルトの有効期限です。 デフォルト値: 0 (パスワードが期限切れにならないことを指定します)。単位:日。 この変数は、ユーザーの PASSWORD_EXPIRE ポリシーが DEFAULT に設定されている場合にのみ有効になります。例: |
password_history | 履歴パスワードのデフォルト数。 デフォルト値: 0 (制限なし)。 この変数は、ユーザーの PASSWORD_HISTORY ポリシーが DEFAULT に設定されている場合にのみ有効になります。例: |
validate_password_policy | パスワード強度検証ポリシーです。 デフォルト値: NONE または 0。検証は行われません。有効な値: STRONG および 2。 この変数を STRONG または 2 に設定した場合、 特殊文字には、次の文字が含まれます。 |
rewrite_or_to_in_predicate_threshold | OR を IN に書き換えるための OR 演算子のデフォルト数。 デフォルト値:2。これは、2 つの OR 演算子を IN 述語として書き換えることができることを指定します。 |
file_cache_base_path | BE 上のブロックファイルキャッシュのストレージパス。デフォルト値:random。BE 構成のストレージパスがランダムに選択されることを指定します。 |
topn_opt_limit_threshold | 上位 N 件クエリ最適化機能の Limit 句のしきい値。デフォルト値:1024。 この例では、 |
use_fix_replica | クエリに固定レプリカを使用するかどうかを指定します。値は 0 から始まります。 デフォルト値:-1(この機能が無効になっていることを指定します)。 |
互換性のある変数または予約変数
このタイプの変数は、実際的な効果はありません。
変数 | 説明 |
SQL_AUTO_IS_NULL | この変数は、JDBC 接続プール c3p0 との互換性を確保するために使用されます。実際的な効果はありません。 |
auto_increment_increment | この変数は、MySQL クライアントとの互換性を確保するために使用されます。実際的な効果はありません。ApsaraDB for SelectDB は 自動インクリメント 列をサポートしていますが、この変数は自動インクリメント列の動作には影響しません。これは |
autocommit | この変数は、MySQL クライアントとの互換性を確保するために使用されます。実際的な効果はありません。 |
character_set_client | この変数は、MySQL クライアントとの互換性を確保するために使用されます。実際的な効果はありません。 |
character_set_connection | この変数は、MySQL クライアントとの互換性を確保するために使用されます。実際的な効果はありません。 |
character_set_results | この変数は、MySQL クライアントとの互換性を確保するために使用されます。実際的な効果はありません。 |
character_set_server | この変数は、MySQL クライアントとの互換性を確保するために使用されます。実際的な効果はありません。 |
collation_connection | この変数は、MySQL クライアントとの互換性を確保するために使用されます。実際的な効果はありません。 |
collation_database | この変数は、MySQL クライアントとの互換性を確保するために使用されます。実際的な効果はありません。 |
collation_server | この変数は、MySQL クライアントとの互換性を確保するために使用されます。実際的な効果はありません。 |
have_query_cache | この変数は、MySQL クライアントとの互換性を確保するために使用されます。実際的な効果はありません。 |
init_connect | この変数は、MySQL クライアントとの互換性を確保するために使用されます。実際的な効果はありません。 |
interactive_timeout | この変数は、MySQL クライアントとの互換性を確保するために使用されます。実際的な効果はありません。 |
language | この変数は、MySQL クライアントとの互換性を確保するために使用されます。実際的な効果はありません。 |
max_allowed_packet | この変数は、JDBC 接続プール c3p0 との互換性を確保するために使用されます。実際的な効果はありません。 |
net_buffer_length | この変数は、MySQL クライアントとの互換性を確保するために使用されます。実際的な効果はありません。 |
net_read_timeout | この変数は、MySQL クライアントとの互換性を確保するために使用されます。実際的な効果はありません。 |
net_write_timeout | この変数は、MySQL クライアントとの互換性を確保するために使用されます。実際的な効果はありません。 |
query_cache_size | この変数は、MySQL クライアントとの互換性を確保するために使用されます。実際的な効果はありません。 |
query_cache_type | この変数は、JDBC 接続プール c3p0 との互換性を確保するために使用されます。実際的な効果はありません。 |
sql_safe_updates | この変数は、MySQL クライアントとの互換性を確保するために使用されます。実際的な効果はありません。 |
tx_isolation | この変数は、MySQL クライアントとの互換性を確保するために使用されます。実際的な効果はありません。 |
tx_read_only | この変数は、MySQL クライアントとの互換性を確保するために使用されます。実際的な効果はありません。 |
transaction_read_only | この変数は、MySQL クライアントとの互換性を確保するために使用されます。実際的な効果はありません。 |
transaction_isolation | この変数は、MySQL クライアントとの互換性を確保するために使用されます。実際的な効果はありません。 |
version | この変数は、MySQL クライアントとの互換性を確保するために使用されます。実際的な効果はありません。 |
performance_schema | この変数は、MySQL JDBC 8.0.16 以降との互換性を確保するために使用されます。実際的な効果はありません。 |
codegen_level | この変数は、LLVM codegen のレベルを設定するために使用されます。有効になりません。 |
license | この変数は、ApsaraDB for SelectDB のライセンスを表示するために使用されます。他に効果はありません。 |
resource_group | この変数は予約されています。 |
system_time_zone | この変数は、クラスタの初期化時にシステム タイムゾーンに設定されます。この変数は変更できません。 |
version_comment | この変数は、ApsaraDB for SelectDB のバージョンを表示するために使用されます。この変数は変更できません。 |
dump_nereids_memo | この変数は、回帰テストに使用されます。 |
group_concat_max_len | この変数は、一部のビジネス インテリジェンス(BI)ツールとの互換性を確保するために使用されます。実際的な効果はありません。 |
be_number_for_test | この変数は実際的な効果はありません。 |
workload_group | この変数は予約されています。 |
タイムアウト設定
ApsaraDB for SelectDB では、query_timeout 変数と insert_timeout 変数、および query_timeout ユーザー プロパティと insert_timeout ユーザー プロパティを使用して、タイムアウト設定を構成できます。
タイムアウト設定は、優先順位の高いものから順に、セッション変数 > ユーザー プロパティ > グローバル変数 > 既定値 の順に有効になります。優先順位の高いタイムアウト設定が構成されていない場合は、優先順位の低い設定が自動的に有効になります。
query_timeout は、すべてのステートメントのタイムアウト期間を制御するために使用されます。insert_timeout は、INSERT ステートメントのタイムアウト期間を制御するために使用されます。INSERT ステートメントを実行するときは、query_timeout と insert_timeout で設定された期間のうち、長い方のタイムアウト期間が使用されます。
query_timeout および insert_timeout ユーザー プロパティは、特定のユーザーに対して管理者ユーザーのみが構成します。これらの 2 つのユーザー プロパティは、指定されたユーザーのデフォルトのタイムアウト設定を変更するために使用され、quota セマンティクスを持ちません。user properties で構成されたタイムアウト設定は、クライアントが再接続された後に有効になります。
参照資料
タイムゾーン形式の詳細については、「List of tz database time zones」をご参照ください。
インターネット割り当て番号局 ( IANA ) タイムゾーンデータベースの詳細については、「IANA Time Zone Database」をご参照ください。
ICANN タイムゾーンデータベースの詳細については、「The tz-announce Archives」をご参照ください。