LiteSpeedとMariaDBのチューニング

LiteSpeedをうまく使うにはどうすべきか考えていきたいと思います。

Apache2はマルチプロセス、LiteSpeedはシングルプロセスで動作します。
Apache2は1つのアクセスに対して1つのプロセスを立ち上げて処理します。LiteSpeedは1つの親プロセスがすべてのアクセスを処理します。したがって、Apache2はコア数とメモリが多いほど処理できる量が増え、LiteSpeedはシングルコア性能が高いほど処理できる量が増えます。

LiteSpeedはアクセスが来ると子スレッドを生成して別のコアに処理を委託します。コアは処理が終わると結果を非同期に返し、親プロセスがページを表示します。この点において、マルチコアであることに意味があります。親プロセスの負荷と比べると子スレッドの負荷は小さく、私の環境では4コアで十分足りています。

ベンチマークを走らせたところ、親プロセスのCPUは使用率100%となりますが、子スレッドは20%前後までしか上がりません。ワーカーに8コアも16コアも割り当てても意味がありません。私は4コアを割り当てています。

MariaDBの設定も重要です。次の場所に設定ファイルがあります。

sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf

まず、スレッドプールを適用すべきです。私は4コアで動作させています。
buffer_pool_sizeは実メモリの8割が好ましいです。

thread_handling = pool-of-threads
thread_pool_size = 4
thread_pool_max_threads = 4
innodb_thread_concurrency = 4
innodb_read_io_threads = 4
innodb_write_io_threads = 4
innodb_sync_array_size = 4

innodb_buffer_pool_size = 8G
innodb_file_per_table = ON
innodb_log_file_size = 2G
innodb_log_buffer_size = 32M

バッファーの最大値を設定することもできます。

net_buffer_length = 4K
max_allowed_packet = 1M
read_rnd_buffer_size = 1M
read_buffer_size = 1M
join_buffer_size = 2M
sort_buffer_size = 2M
thread_stack = 1M

Query Cacheも有効にしましょう。私はL3 Cacheの半分に設定しています。

query_cache_limit = 256K
query_cache_size = 8M
query_cache_type = 1

私の設定がそのまま正しいかはわかりませんが、ベンチマークを見ながらこの設定に落ち着きました。プラグインでLiteSpeed Cacheも導入しています。