Windows:
- Windows Server 2012 R2
- Windows 10
MariaDB + Mroonga:
Windowsを用意します。たとえばWindows 10など再現が確認されていない環境でも大丈夫です。その環境では再現しないことがわかるというのも重要な情報です。
上述の再現が確認されているMariaDB + Mroongaのどれかをダウンロードして、展開します。
このリポジトリーをcloneします。次のファイルを個別にダウンロードしてもよいです。
- https://github.com/mroonga/windows-resource-leak-test/blob/master/MySql.Data.dll
- https://github.com/mroonga/windows-resource-leak-test/blob/master/my.ini
- https://github.com/mroonga/windows-resource-leak-test/blob/master/query.ps1
- https://github.com/mroonga/windows-resource-leak-test/blob/master/searchStr.txt
- https://github.com/mroonga/windows-resource-leak-test/blob/master/xxxxxxxx_dat_static_page2.sql
テスト用クエリー実行スクリプトquery.ps1
ではC:\Administrator\windows-resource-leak-test\
以下にこのリポジトリーの内容があることを仮定しているので、別の場所にclone・ダウンロードした場合はquery.ps1
を書き換えてください。
このリポジトリー内にあるmy.ini
を使ってmysqld.exe
を起動します。
> cd ...\mariadb-10.1.29-with-mroonga-7.09-winx64
> bin\mysqld.exe --defaults-file=C:\Users\Administrator\windows-resource-leak-test\my.ini
別のターミナルでテスト用のデータベースを作ります。
> cd ...\mariadb-10.1.29-with-mroonga-7.09-winx64
> bin\mysql.exe -u root -e 'create database mroonga_test'
このリポジトリー内のテストデータxxxxxxxx_dat_static_page2.sql
をテスト用のデータベースにロードします。
> cd ...\mariadb-10.1.29-with-mroonga-7.09-winx64
> bin\mysql.exe -u root mroonga_test < C:\Users\Administrator\windows-resource-leak-test\xxxxxxxx_dat_static_page2.sql
このリポジトリー内のテストスクリプトquery.ps1
を実行します。セキュリティーのため、PowerShellスクリプトはデフォルトでは実行できないようになっています。管理者権限でSet-ExecutionPolicy Unrestricted
を実行して制限を緩める必要があります。
> cd C:\Users\Administrator\windows-resource-leak-test
> Set-ExecutionPolicy Unrestricted
> .\query.ps1
このスクリプトを実行し続け、約52万クエリー発行程度で以下のどれかの問題が発生するはずです。
-
mysqld.exe
が次のようなエラーログを出力する2018-01-18 21:12:52 3620 [ERROR] Error in accept: システムのバッファー領域が不足しているか、またはキューがいっぱいなため、ソケット操作を実行できませんでした。
-
mysqld.exe
が停止する -
mysqld.exe
は停止しないが、接続を受け付けない
なお、ターミナルを複数立ち上げて同時に実行すると問題発生までの時間が短くなります。
-
再現する環境と再現しない環境があることを確認済みです。再現するかどうかの違いがどこからくるかわかっていないので、それを知りたいです。
-
ストレージエンジンをMroongaからMyISAMに変更するとすでに再現している環境でも再現しなくなります。
MySql.Data.dll: GPLv2
Extracted from MySQL Connector/Net.
Others: Public domain