و اما مقدارهای connect_timeout و max_allowed_packet در MySQL/MariaDB چیست؟ در این مقاله کوتاه قصد دارم نحوه تغییر متغیرهای connect_timeout و همچنین max_allowed_packet را در مای اسکیول به همراه نحوه کارکرد آنها را شرح دهم.
همچنین توصیه میشود مطالعه کنید :
نکات مفید برای برطرف کردن خطاهای رایج در MySQL
15 ترفند مفید برای Tune کرد (بهینه سازی و بهبود عملکرد) MySQL/MariaDB
آموزش دستورات MySQL (بخش اول)
متغییر connect_timeout :
connect_timeout در تنظیمات MySQL به سرور مای اسکیول میگه که چه مدت منتظر یک پکت ارسالی از سمت کلاینت قبل از پاسخ دادن (خطای Bad handshake) بمونه. مقدار پیش فرض 10 ثانیه است.
متغییر max_allowed_packet :
زمانیکه یک کلاینت مای اسکیول یا سرور مای اسکیول یک بسته ای را بزرگتر از سایز max_allowed_packet دریافت میکند، در اینجا یک خطای ER_NET_PACKET_TOO_LARGE رخ داده و کانکشن ها بسته میشود و برخی کلاینت ها و همچنین شما ممکن است خطای Lost connection to MySQL server را در میان کانکشن هایتان دریافت کنید.
هر دوی اینها (client و server) متغییر max_allowed_packet خودشان را دارند، بنابراین اگر شما میخواهید پکت های بزرگ را مدیریت کنید، شما باید این مقدار را هم در سرور و هم کلاینت افزایش دهید.
اگر شما از برنامه کلاینت mysql استفاده میکنید، مقدار پیش فرض max_allowed_packet برابر با 16MB است. برای قراردادن مقدار بیشتر، دستور زیر را اجرا کنید.
مقدار max_allowed_packet در سرور برابر با 1MB است. اگر سرور نیاز به کوئری های بزرگتر داره شما میتوانید اونو افزایش بدید (برای مثال، اگر شما با متغییرهای بزرگ BLOB کار میکنید). برای قرار دادن مقدار 16MB، دستور زیر را اجرا کنید.
شما همچنین میتوانید متغییر max_allowed_packet را به عنوان یک آپشن به فایل اضافه کنید. برای مثال، برای قرار دادن مقدار 16MB، خط زیر را به فایل تنظیمات اضافه کند.
این روش برای افزایش مقدار متغییر امن تر است زیرا مموری اضافی فقط زمانیکه نیاز هست اختصاص داده میشود. برای مثال، mysqld فقط زمانیکه یک کوئری بزرگ یا یک نتیجه بزرگ را میخواهد برگرداند مموری بیشتری را اختصاص میدهد. مقدار پیش فرض کوچک متغییر جهت احتیاط برای گرفتن پکت های نادرست بین کلاینت و سرور میباشد، همچنین مطمئن شوید خارج از مموری توسط استفاده از پکت های بزرگ تصادفی آنرا اجرا نمیکنید.
شما همچنین ممکن است مشکلات عجیب و غریبی با پکت های بزرگ در صورت استفاده از مقادیر بزرگ BLOB دریافت کنید اما دسترسی mysqld به مموری کافی برای بکاربردن کوئری داده نشده است. اگر شما به این مورد شک دارید، سعی کنید ulimit -d 256000 را به ابتدای اسکریپت mysqld_safe اضافه کنید و mysqld را مجددا راه اندازی کنید.
همچنین توصیه میشود مطالعه کنید :
نکات مفید برای برطرف کردن خطاهای رایج در MySQL
15 ترفند مفید برای Tune کرد (بهینه سازی و بهبود عملکرد) MySQL/MariaDB
آموزش دستورات MySQL (بخش اول)
متغییر connect_timeout :
connect_timeout در تنظیمات MySQL به سرور مای اسکیول میگه که چه مدت منتظر یک پکت ارسالی از سمت کلاینت قبل از پاسخ دادن (خطای Bad handshake) بمونه. مقدار پیش فرض 10 ثانیه است.
متغییر max_allowed_packet :
زمانیکه یک کلاینت مای اسکیول یا سرور مای اسکیول یک بسته ای را بزرگتر از سایز max_allowed_packet دریافت میکند، در اینجا یک خطای ER_NET_PACKET_TOO_LARGE رخ داده و کانکشن ها بسته میشود و برخی کلاینت ها و همچنین شما ممکن است خطای Lost connection to MySQL server را در میان کانکشن هایتان دریافت کنید.
هر دوی اینها (client و server) متغییر max_allowed_packet خودشان را دارند، بنابراین اگر شما میخواهید پکت های بزرگ را مدیریت کنید، شما باید این مقدار را هم در سرور و هم کلاینت افزایش دهید.
اگر شما از برنامه کلاینت mysql استفاده میکنید، مقدار پیش فرض max_allowed_packet برابر با 16MB است. برای قراردادن مقدار بیشتر، دستور زیر را اجرا کنید.
کد PHP:
shell> mysql --max_allowed_packet=32M
کد PHP:
shell> mysqld --max_allowed_packet=16M
کد PHP:
[mysqld]
max_allowed_packet=16M
شما همچنین ممکن است مشکلات عجیب و غریبی با پکت های بزرگ در صورت استفاده از مقادیر بزرگ BLOB دریافت کنید اما دسترسی mysqld به مموری کافی برای بکاربردن کوئری داده نشده است. اگر شما به این مورد شک دارید، سعی کنید ulimit -d 256000 را به ابتدای اسکریپت mysqld_safe اضافه کنید و mysqld را مجددا راه اندازی کنید.