اگر مدت زیادی است که از نصب TestRail Server استفاده میکنید، ممکن است در database تعداد زیادی test case و/یا test اضافی جمع شده باشد. این testها و caseهای اضافی بهدلیل بخشی از کد ناکارآمد در TestRail ایجاد میشدند که در نسخه TestRail ۵.۵ بهینه شد.
این ردیفهای اضافی برای test caseهایی ساخته میشدند که هم هنگام ایجاد test run و هم هنگام بستن آن، در test run انتخاب نشده بودند. برنامه بدون مشکل کار میکرد، اما این دادههای اضافی بهمرور جمع میشدند و در نهایت بزرگ شدن جدولهای cases و tests باعث افت performance میشد. در نتیجه ممکن بود کندی سیستم و lock timeout رخ دهد.
بسته به عمر database و میزان استفاده از آن، ممکن است تا ۹۰٪ یا حتی بیشتر از ردیفها اضافی باشند.
ما به مشتریانی کمک کردهایم که بهدلیل این دادههای اضافی، هم در زیرساخت cloud ما و هم در نصبهای on-premise (Server)، با مشکل performance روبهرو شده بودند. برای حل این مشکل، از چند script برای شناسایی و حذف ردیفهای اضافی از database در TestRail استفاده کردهایم. به درخواست کاربران، این scriptها را در اختیار مشتریان Server قرار میدهیم تا در صورت نیاز از آنها برای بهبود performance نصب TestRail خود استفاده کنند.
از آنجا که MySQL InnoDB برای حذف انبوه ردیفها عملکرد خوبی ندارد، این scriptها از روش «copy, drop and rename» استفاده میکنند که بسیار سریعتر است؛ در بعضی databaseهای مشتریان حتی چند روز سریعتر بوده است. script نسخههای جدیدی از جدولها میسازد و آنها را با ردیفهای معتبر پر میکند. همچنین نسخههایی از جدولها را با ردیفهای اضافی ایجاد میکند. در عمل، scriptها جدولها را به جدولهای سالم و جدولهای اضافی تقسیم میکنند. بعد از ایجاد این جدولها، جدولهای قدیمی حذف میشوند و نام جدولهای سالم تغییر میکند تا به نسخههای جدید جدولها تبدیل شوند.
جدولهای خروجی برای احتیاط در database باقی میمانند. بعد از گذشت زمان کافی و مطمئن شدن از اینکه همه چیز درست کار میکند، میتوانید آنها را حذف کنید. این کار میتواند performance را بهطور قابل توجهی بهتر کند، از جمله هنگام حذف test runهای بستهشده قدیمی.
scriptها در ادامه آمدهاند و باید با دستور زیر اجرا شوند:
php [mr_newtest.php, mr_newcase.php] -h {host} -u {user} -p{password or leave blank and it prompts you} -d {database}
توصیه میکنیم scriptها را خارج از ساعت کاری اجرا کنید، چون جدولها را lock میکنند. لطفاً قبل از اجرای scriptها از database خود backup بگیرید!
نمونه خروجی در ادامه آمده است:
php mr_newtest.php -h <hostname> -u <user> -p -d <db>
03/04/2021 02:04:32 am: dropping new_tests table if it exists
03/04/2021 02:04:32 am: dropping deadwood_tests table if it exists
03/04/2021 02:04:32 am: dropping old_tests table if it exists
03/04/2021 02:04:32 am: creating new_tests table
03/04/2021 02:04:32 am: creating deadwood_tests table
03/04/2021 02:04:32 am: Locking all tables
03/04/2021 02:04:32 am: inserting is_selected = 1 tests into new_tests table
03/04/2021 02:04:32 am: insert into new_tests select * from tests where is_selected = 1
03/04/2021 02:48:56 am: inserting is_selected = 0 tests into deadwood_tests table
03/04/2021 02:48:56 am: insert into deadwood_tests select * from tests where is_selected = 0
03/04/2021 07:57:57 am: counting rows in new_tests table
03/04/2021 07:58:13 am: Number of rows in new_tests table: 17849816
03/04/2021 07:58:13 am: counting rows in deadwood_tests table
03/04/2021 08:01:42 am: Number of rows in deadwood_tests table: 796606952
03/04/2021 08:01:42 am: unlocking all tables
03/04/2021 08:01:42 am: Renaming tables
03/04/2021 08:01:42 am: dropping old_tests table
03/04/2021 08:01:49 am: Finished.
توجه داشته باشید که بعد از اجرای script یا scriptها، ممکن است اندازه کلی database شما کمتر به نظر نرسد. دلیلش این است که جدولهای موقتی ایجاد میشوند و دادههای اضافی در آنها کپی میشود. همانطور که بالاتر گفته شد، وقتی مطمئن شدید نمونه TestRail شما با دادههای موردنظر درست کار میکند، میتوانید این جدولها را حذف کنید و در نتیجه اندازه کلی database کاهش پیدا میکند.

