ablog

不器用で落着きのない技術者のメモ

SAP HANA で SQL 実行時に実行されるスレッド数について

HANA には1つの SQL に対して1スレッド使われる SQL Executor とSQL を並列*1タスクに分解して処理する Job Worker スレッドがあり、max_concurrency は1のSQL あたりの並列実行スレッド数を制御するパラメータ。max_concurrency_hint は直近のワークロードに基づいて動的に導出されるスレッド数で、max_concurrency より大きくはできない。

従って、HANA で SQL の実行に使われる最大スレッド数はmax_sql_executor + max_sql_executors * max_concurrency となる。CPU使用率の上限を厳密に抑えたいのであれば、max_concurrency_hint だけでなく max_concurrency も設定することが望ましいのではないかと思う。
CPU使用率スパイク時にM_SERVICE_THREADSシステムビューで STATEMENT_HASH が同じスレッドが多数実行されている場合は、max_concurrency で抑制できるが、異なる STATEMENT_HASH のスレッドが多数実行されている場合は max_sql_executors で抑制する必要があると思う。

参考

Parameters for Job Executor

You can change the default settings in the configuration editor of the SAP HANA studio (recommended) or directly in the execution section of the global.ini or indexserver.ini system properties file.

  • max_concurrency - sets the target number of threads that can be used.

Threads are created as required up to the limit defined here. New threads are created, for example, if a thread is blocked waiting for I/O or network. Set this to a reasonable value between the number of logical cores per CPU up to the overall number of logical cores in the system. Does not require a restart. Available since SPS 09. Note that from SPS12, this parameter should only need to be modified for multitenant database container installations.

  • max_concurrency_hint - limit concurrency hint even if more active job workers would be available.

The JobExecutor proposes the number of jobs to create for parallel processing based on the recent load on the system. This parameter limits decisions to parallelize on a low level of code. Multiple parallelization steps may result in far more jobs being created for a statement (and hence higher concurrency) than this parameter. The default is 0 (no limit is given, but hint is never greater than max_concurrency). On large systems (that is more than 4 sockets) setting this parameter to the number of logical cores of one socket may result in better performance. Performance tests with the target workload are needed to confirm this.

Does not require a restart. Available since SPS 08 (revision 85).

SAP Help Portal

*1:ここではあえて並行ではなく並列と書いている。同時に ON CPU で実行できない場合、並列にはならないが、基本的にマルチプロセッサで並列処理を意図しているため。