データベースパフォーマンスの向上

次のようにすれば、データベースサーバーのパフォーマンスを向上させることができます。

  • 非常に大きなプロジェクトに対してはメモリサイズと制限を制御する
  • ファイルシステムからデータベースサーバーにデータを直接ロードさせるデータベースサーバーと統合ビルド解析 (特に、kwadmin load) を同じホストで実行している場合、このオプションは効果的です。

データベースサーバーに対するメモリサイズと制限のカスタマイズ

次のような統合ビルド解析エラーが発生する場合は、メモリパラメーターをカスタマイズする必要があります。

kwloaddb - Klocwork Project Database Creation Utility
Error: 
at com.klocwork.database.Agent.processSQLError(Unknown Source)
at com.klocwork.database.Agent.doCommand(Unknown Source)

Error occurred while loading database: Database error occurred:  
The table 'tmp_metrics_from' is full in SQL statement 'insert into my_project__shared.'

データベースサーバーに対してメモリサイズと制限をカスタマイズするには、以下の操作を行います。

  1. 編集のために次のファイルを開きます。<Server_install>/config/kwmysql.ini
  2. 必要に応じて編集します。該当するパラメーターとその候補値は、kwmysql.ini パラメーターで説明されています。
  3. ファイルを保存します。
  4. Klocwork サーバーを validate service (または Windows Service 管理を使用して) で再起動します。
    validate service --projects-root <projects_root> restart 
    

次:統合ビルド解析を再開します。

Kwmysql.ini パラメーター

プロジェクトが大きく、Klocwork データベースの性能を改善させる必要がある場合には、<Server_install>/config/kwmysql.ini にある kwmysql.ini ファイルをカスタマイズすることができます。ファイルを変更した後、Klocwork サーバーを再起動させることを忘れてはなりません。

デフォルトパラメーターの変更案

パラメーターとデフォルト値 値の候補
key_buffer_size = 80M 200M
max_heap_table_size = 128M 256M
read_buffer_size = 512K 2M
read_rnd_buffer_size = 1M 2M
query_cache_size = 4M 128M
query_cache_limit = 100K 2M
tmp_table_size = 128M 256M
innodb_buffer_pool_size = 512M 1G 専用サーバーでは、Klocwork サーバーを実行するコンピューター上の RAM の 50~80%までサイズを大きくすることができますが、メモリー使用量を高く設定しすぎないように注意してください。同じマシンを Klocwork 統合ビルド解析にも使用する場合は、この値を使用可能なメモリの 50% より大きくすることは望ましくありません。詳細は、https://mariadb.com/kb/en/library/documentation/ で、MariaDB ドキュメンテーションを参照してください。

追加パラメーターの変更案

以下の新しいパラメーターと値をファイルに追加する必要がある場合もあります。この後のファイルの例を参照してください。

追加パラメーター 値の候補
innodb_log_files_in_group= 2 これは InnoDB ログファイル (InnoDB トランザクション用の一時ストレージ) の総数を定義します。ログファイルを複数の小さなファイルに分割するとファイルへのアクセス速度が向上し、このため、大きなトランザクションの速度が向上します。推奨されるファイル数は 2 つです。
innodb_log_file_size= 48M 推奨されるログファイルのサイズは、innodb_buffer_pool_size パラメーターの値に関連します。innodb_buffer_pool_size の値が 128M の場合は、推奨されるログファイルのサイズは 48M です。妥当な値は、<innodb_buffer_pool_size>/<innodb_log_files_in_group> より大きくならない範囲内とすることができます。詳細は、https://mariadb.com/kb/en/library/documentation/ で、MariaDB ドキュメンテーションを参照してください。
wait_timeout= 非対話型接続が終了する前に、サーバーが活動を待機する秒数。この値はデータベースのロードに影響する場合があるため、この値が最大規模のプロジェクトのデータベースのロード時間よりも小さくならないことを確認してください。
innodb_log_group_home_dir= ログファイルを projects_root の場所とは別のハードドライブに保存すると、トランザクションの速度が向上します (確定したデータとトランザクションのデータが並行してして取得される可能性があるため)。
connect_timeout= "Bad handshake" に応答する前に、データベースサーバーが接続パケットを待機する秒数。この値をデフォルト値 10 よりも高く設定しておくと、クライアントが 「'XXX' で MySQL サーバーとの接続が失われました」システムエラーにしばしば遭遇する場合に役に立ちます。

カスタマイズされた kwmysql.ini ファイルの例

4GB RAM のマシンを Validate サーバー実行専用にして展開するためにカスタマイズした kwmysql.ini ファイルの例を示します。

コピー
[mysqld]
#
character_set_server=utf8
#
console
#
innodb_file_per_table
innodb_fast_shutdown=0

innodb_data_file_path=ibdata1:10M:autoextend
#
key_buffer_size = 200M
#
innodb_buffer_pool_size = 1G
innodb_log_file_size = 100M
innodb_log_files_in_group = 2
#
binlog_cache_size = 32K
#
read_buffer_size = 2M
read_rnd_buffer_size = 2M
sort_buffer_size = 4M
join_buffer_size = 1M
bulk_insert_buffer_size = 10M
#
skip-external-locking
default-storage-engine = MYISAM
max_connect_errors=999999999
lower_case_table_names=1
#
query_cache_size = 128M
query_cache_limit = 2M
query_cache_type = 1
#
myisam_max_sort_file_size = 4G
myisam_sort_buffer_size = 128M
tmp_table_size = 256M
max_heap_table_size = 256M
table_open_cache=300
open_files_limit=2048

メモリ値を設定する場合は、次の式を使用してください。

 innodb_buffer_pool_size + key_buffer_size + query_cache_size + (join_buffer_size + sort_buffer_size) * max_connections < accessible RAM

32 ビットプロセスについて使用可能な RAM 量は 2 GB です。