خطای Error establishing a database connection
سرویس MySQL متوقف شده (اغلب بهدست OOM Killer)، wp-config تغییر کرده، سقف اتصالها پر شده یا جدولی آسیب دیده است.
بهینهسازی دیتابیس سرور برای کوئری کند، قفل جدول، خطای اتصال به دیتابیس، دیسک پر یا load ناگهانی سرور است. تیم کانفیگ سرور علت را در MySQL، MariaDB، PostgreSQL یا SQL Server و در لینوکس یا Windows Server پیدا میکند، پیش از هر تغییر پرریسک از داده نسخه پشتیبان میگیرد و اصلاحات را مرحلهبهمرحله انجام میدهد.
سرویس MySQL متوقف شده (اغلب بهدست OOM Killer)، wp-config تغییر کرده، سقف اتصالها پر شده یا جدولی آسیب دیده است.
معمولاً چند کوئری بدون ایندکس بیشتر زمان را میگیرند؛ slow query log و EXPLAIN نشان میدهند کدام کوئری و به چه دلیل.
پیام Waiting for table metadata lock در MySQL یا گزارش deadlock در SQL Server یعنی تراکنشها منتظر یکدیگرند و ترتیب دسترسی و ایندکسها باید بازبینی شوند.
خطای No space left on device، OOM Killer یا سرویسی که پس از بهروزرسانی failed میماند، مشکل سیستمعامل است و اغلب اول دیتابیس را از کار میاندازد.
کوئریهای پرهزینه را پیدا میکنیم، ایندکسها را اصلاح میکنیم و پیکربندی موتور را با بار واقعی هماهنگ میکنیم. اگر دیتابیس خراب شده باشد، اول داده امن میشود.
تنظیم InnoDB متناسب با رم و بار واقعی سرور.
بیشترین بهبود معمولاً از چند کوئری پرتکرار میآید.
کندی اغلب از bloat جدولها و autovacuum تنظیمنشده است.
برای نرمافزارهای حسابداری، ERP و سامانههای سازمانی.
افزونه بهینهسازی دیتابیس وردپرس فقط بخشی از کار را انجام میدهد.
وقتی سرویس اجرا نمیشود، اول داده حفظ میشود و بعد سراغ سرعت میرویم.
بهینهسازی دیتابیس سرور معمولاً با پیدا کردن چند کوئری پرهزینه شروع میشود. روی بیشتر سایتها و نرمافزارهای سازمانی، بخش بزرگی از بار دیتابیس از تعداد کمی کوئری پرتکرار میآید و بیشترین بهبود هم از اصلاح همانها به دست میآید. تنظیمات حافظه در مرحله بعد میآیند. اگر سرویس کرش کرده باشد ترتیب کار عوض میشود و حفظ داده جلوتر از هر کار دیگری است.
در MySQL و MariaDB، slow query log را با long_query_time مناسب روشن کنید و خروجی را با pt-query-digest خلاصه کنید. این ابزار کوئریهای مشابه را گروه میکند و نشان میدهد کدام گروه بیشترین زمان کل را گرفته است؛ کوئریای که هر بار کوتاه است ولی هزاران بار اجرا میشود، گاهی از یک کوئری کند تکی مهمتر است. در PostgreSQL همین کار را pg_stat_statements و در SQL Server، Query Store و DMVها انجام میدهند.
بعد از پیدا کردن کوئری، طرح اجرای آن را با EXPLAIN بخوانید. اگر نوع دسترسی ALL است یا تعداد ردیفهای بررسیشده به کل جدول نزدیک است، دیتابیس برای پیدا کردن چند ردیف همه جدول را میخواند. EXPLAIN ANALYZE زمان واقعی هر مرحله را هم نشان میدهد، اما خود کوئری را اجرا میکند؛ روی UPDATE یا DELETE در دیتابیس اصلی از آن استفاده نکنید.
ایندکس را برای کوئریهایی بسازید که واقعاً اجرا میشوند. در ایندکس چندستونی ترتیب ستونها مهم است و ایندکسی که با ستون a شروع شده، به کوئریای که فقط روی ستون b فیلتر میکند کمکی نمیکند. شرط LIKE با علامت % در ابتدای عبارت، یا اعمال تابع روی ستون در WHERE، هم معمولاً جلوی استفاده از ایندکس را میگیرد.
هر ایندکس نوشتن را کندتر میکند و فضا میگیرد، پس ساختن ایندکس روی همه ستونها راهحل نیست و ایندکسهای تکراری یا بیاستفاده باید حذف شوند. OPTIMIZE TABLE یا دکمه «بهینهسازی» افزونههای وردپرس جای ایندکس درست را نمیگیرد و روی جدول بزرگ در ساعت اوج، دیسک را درگیر میکند. در وردپرس و ووکامرس، حجم دادههای autoload در wp_options و اندازه جدول wp_postmeta اغلب اثر بیشتری دارند.
innodb_buffer_pool_size تعیین میکند چه مقدار از داده و ایندکسهای InnoDB در رم بماند. روی سروری که فقط دیتابیس اجرا میکند میتوان بخش بزرگی از رم را به آن داد، اما روی سرور مشترک با وبسرور و PHP-FPM باید سهم هر کدام را جدا حساب کرد. max_connections را هم بیحساب بالا نبرید، چون هر اتصال بافرهای خودش را دارد و در اوج ترافیک مجموع مصرف رم از حد میگذرد و OOM Killer دیتابیس را میبندد.
در PostgreSQL، shared_buffers حافظه اشتراکی را تعیین میکند و work_mem برای هر عملیات مرتبسازی یا hash در هر کوئری جداگانه مصرف میشود؛ مقدار بزرگ work_mem همراه اتصالهای زیاد رم را تمام میکند و PgBouncer تعداد اتصالهای واقعی را پایین نگه میدارد. در SQL Server اگر max server memory تنظیم نشود، سرویس تا جایی که بتواند رم میگیرد و خود Windows Server کند میشود. اگر کندی مزمن است و فوری نیست، گزارش رایگان عملکرد سرور گلوگاه را در همه لایهها بررسی میکند.
پیش از هر تلاش برای راهاندازی دوباره، از پوشه داده کپی بگیرید؛ وقتی سرویس متوقف است، این کپی سادهترین نسخه پشتیبان است. بعد error log دیتابیس و لاگ سیستمعامل را بخوانید تا معلوم شود علت دیسک پر، کمبود رم یا جدول آسیبدیده است. اگر دیسک با binlog پر شده، فضا را با PURGE BINARY LOGS از داخل دیتابیس آزاد کنید، چون حذف دستی فایلهای binlog، Replication و بازیابی را خراب میکند.
اگر InnoDB بالا نمیآید، innodb_force_recovery را از مقدار کم و فقط روی کپی داده امتحان کنید، از داده dump سالم بگیرید و آن را در نمونه تازه بازگردانید. طبق مستندات MySQL، مقدار ۴ یا بیشتر ممکن است فایلهای داده را برای همیشه خراب کند. اگر دیسک آسیب فیزیکی دیده یا داده حذف شده، کار از بهینهسازی گذشته و به بازیابی اطلاعات سرور نیاز دارید.
موتور دیتابیس، حجم داده و تعداد کوئریهای پرهزینه پایه برآورد هستند. کرش و خرابی داده کار را طولانیتر میکند، چون پیش از هر اصلاح باید نسخه پشتیبان گرفته و سالم بودن داده بررسی شود. اگر کوئریهای کند از کد برنامه میآیند، پیشنهاد بازنویسی را تحویل میدهیم و اجرای آن با تیم توسعه است.
برای برآورد، موتور و نسخه دیتابیس، سیستمعامل، پیام خطا، زمان شروع مشکل و نوع دسترسی موجود را بفرستید. بررسی اولیه رایگان است و برآورد کار پیش از شروع اعلام میشود. برای پایش دائمی و هشدار پیش از کرش بعدی، خدمات مانیتورینگ را ببینید.
رمز دیتابیس یا root را در پیام اولیه نفرستید. روش امن دسترسی پس از بررسی اولیه هماهنگ میشود.
در عیبیابی سرور لینوکس و Windows Server، منابع، سرویسها و لاگها را همزمان با دیتابیس بررسی میکنیم. اگر کندی مزمن است و فوری نیست، گزارش رایگان عملکرد سرور را درخواست کنید.
No space left on device گاهی یعنی inodeها تمام شده یا فایل حذفشدهای هنوز باز است.
با تمام شدن رم، کرنل لینوکس فرایندی را میبندد و آن فرایند اغلب دیتابیس است.
load بالا بدون مصرف CPU یعنی فرایندها منتظر دیسکاند.
علت سرویسی که بالا نمیآید معمولاً در لاگ نوشته شده است.
بهینهسازی ویندوز سرور اغلب از رمی شروع میشود که SQL Server بیسقف اشغال کرده است.
پیش از هر اقدام پرریسک از پوشه داده یا dump نسخه پشتیبان میگیریم و سرویس را با کمترین ریسک برمیگردانیم.
لاگ دیتابیس، slow query log و قفلها، و در سیستمعامل dmesg، journalctl یا Event Viewer را بررسی میکنیم.
تغییرات یکییکی و ترجیحاً در ساعت کمترافیک اعمال میشوند و اثر هر کدام اندازهگیری میشود.
گزارش علت، تغییرات و مقایسه قبل و بعد را همراه با پیشنهاد پایش و بکاپ تحویل میگیرید.
تجربه عملی روی لینوکس با cPanel یا DirectAdmin، وردپرس و ووکامرس، و SQL Server روی Windows Server.
هر دو لایه را یک تیم بررسی میکند، چون مشکل سیستمعامل اغلب اول دیتابیس را از کار میاندازد.
هیچ تعمیر پرریسکی بدون نسخه پشتیبان و مسیر بازگشت انجام نمیشود.
گزارش نهایی میگوید مشکل از کجا آمد و چه کاری جلوی تکرارش را میگیرد.
پیش از هر تعهدی، مسیر عیبیابی را با شما مرور میکنیم.
افزونهها فقط دادههای اضافه مثل رونوشتها و transientها را پاک میکنند، اما بهینهسازی دیتابیس سرور کوئریهای کند، ایندکسها و تنظیمات موتور دیتابیس را هم با رم و بار واقعی هماهنگ میکند.
اول مطمئن شوید سرویس MySQL یا MariaDB اجرا میشود و دیسک پر نیست، سپس اطلاعات wp-config.php را با کنترلپنل مقایسه کنید. اگر سرویس پشتسرهم متوقف میشود، لاگ خطا و رویدادهای OOM را ببینید؛ نصب دوباره وردپرس کمکی نمیکند.
slow query log فهرست کوئریهایی است که از زمان مشخصی طولانیتر اجرا شدهاند. در MySQL و MariaDB با slow_query_log=1 و long_query_time، مثلاً ۱ ثانیه، فعال میشود؛ معادل آن در PostgreSQL تنظیم log_min_duration_statement است.
ایندکس، مثل فهرست کتاب، پیدا کردن ردیفها را بدون خواندن کل جدول ممکن میکند، اما همیشه سرعت را بیشتر نمیکند. نوشتن را کندتر میکند و فضا میگیرد، پس باید بر اساس کوئریهای واقعی ساخته شود و روی همه ستونها لازم نیست.
احتمالاً inodeها تمام شدهاند؛ inode در لینوکس برای هر فایل مصرف میشود و میلیونها فایل کش یا سشن آن را پر میکنند. حالت دیگر فایل حذفشدهای است که هنوز باز است؛ df -i و lsof +L1 هر دو را نشان میدهند.
OOM Killer بخشی از کرنل لینوکس است که هنگام تمام شدن رم فرایندی را میبندد تا سیستم از کار نیفتد. دیتابیس معمولاً بیشترین رم را دارد و قربانی میشود؛ راهحل تقسیم درست رم است و افزودن swap بهتنها کافی نیست.
بعضی تغییرها ریاستارت سرویس لازم دارند و قطعی کوتاهی ایجاد میکنند؛ این ریاستارتها در زمان هماهنگشده با شما انجام میشوند. پیش از تغییرات پرریسک نسخه پشتیبان گرفته میشود تا در صورت بروز مشکل بتوان به وضعیت قبل برگشت.
موتور و نسخه دیتابیس، سیستمعامل، پیام خطا و زمان شروع مشکل را در تلگرام بنویسید. رمز عبور نفرستید؛ کارشناس کانفیگ سرور پس از بررسی اولیه رایگان، روش امن دسترسی و برآورد کار را اعلام میکند.