دلیل مصرف زیاد دیتابیس MySQL و نکاتی برای بهینه سازی آن
توجه داشته باشید که سرویس های هاست سرورپارس به صورت اشتراکی بوده و تمامی منابع آن از جمله mysql بین تمامی کاربران به اشتراک گذاشته شده و تنها مختص به یک کاربر نیست و کاربران دیگری نیز در حال استفاده از این سرویس می باشند.
همانگونه که شما انتظار سرویس سریع و پایدار و بدون قطعی از سرورپارس دارید کاربران دیگر سرورپارس نیز چنین انتظاری دارند. به همین دلیل تیم فنی سرورپارس، در حالتی که استفاده بیش از حد از mysql توسط یک کاربر صورت گیرد، اقدامی قاطع و سریع انجام می دهد تا از بروز خسارت و تضییع حقوق کاربران دیگر آن سرویس به دلیل قطعی سرویس و یا کاهش سرعت آن جلوگیری نماید(همانگونه که همین تلاش در مورد شما نیز انجام می گردد تا از سرویس شما نیز در مقابل سوء استفاده دیگر کاربران حفاظت شود و شما همیشه سرویس با کیفیت ، سریع و پایدار در اختیار داشته باشید. )
هر سایت داینامیک جهت اجرا و نمایش مطالب نیاز به برقراری ارتباط با پایگاه داده دارد. تمامی اطلاعات مورد نیاز از طریق اجرا دستورات دیتابیس در قالب query استخراج شده و به اسکریپت سایت برگردانده می شوند. و با انجام هر فرایند و باز نمودن هر صفحه ای در سایت، اسکریپت سایت query هایی را روی پایگاه داده اجرا می کند. برای اجرای این دستورات لازم است تا کانکشن جدیدی به اسکریپت اجرا کننده اختصاص داده شود. این کانکشن ها باید بعد از اتمام فرآیند بازیابی و نمایس اطلاعات حتما بسته شوند، زیرا در غیر اینصورت موجب انباشت آنها و وارد آمدن بار زیاد به سرور mysql می شود. بعلاوه تعداد زیاد کانکش های همزمان به سرور mysql نیز از دیگر عواملی است که موجب مصرف بالا و وارد آمدن بار زیاد به سرور mysql می شود.
اغلب بهینه نبودن کدهای سایت و یا کدنویسی های نادرست موجب بوجود آمدن مشکل مصرف بالای mysql می شود و از آنجایی که سرورپارس در این زمینه خدماتی ارائه نمی دهد لذا شما بایستی با فردی متخصص در زمینه برنامه نویسی مشورت نمایید تا بررسی های لازم از جانب ایشان انجام گیرد. به عنوان پیشنهاد، حتی الامکان از مکانیزم های Cache استفاده نمایید تا علاوه بر کاهش بار سرور mysql بازدهی سایت شما نیز به حداکثر ممکن ارتقا یابد.
همواره ایجاد Index از بهترین راه هایی است که می توان به یک نوع داده دسترسی پیدا کرد. بصورت مثال در صورتی که شما یک table با 20 ستون داشته باشید و یکی از ستون های آن بصورت متناوب مورد استفاده و دستیابی قرار بگیرد شما می توانید جهت تسریع در دسترسی به آن یک Index برای آن تعریف کنید. در صورتی که در نبود این index، سرور بایستی یک scan کلی از table مربوطه داشته باشد که به تبع آن روند دستیابی به data زمان بر تر خواهد شد.
در حقیقت تعریف index ها موجب می شود که mysql بصورت ساخت یافته عمل کرده و در زمان نیاز به data بجای انجام scan کلی بین record ها به index ها مراجعه کند، و این مورد موجب می شود که استفاده از منابع سرور کمتر شده و درگیری کمتری بوجود آید.
راه دیگری که می توان جهت بهینه سازی دیتابیس از آن بهره برد قطعه بندی (partition) کردن جداول است. البته این روش برای جداولی بزرگ با تعداد بالای هزار سطر و ستون می باشد. البته متد جستجو و دستیابی mysql در این قسمت نیز تقریبا مشابه با متد قبلی است که بجای بررسی و scan تمامی record ها جستجو تنها در partition مربوطه انجام خواهد گرفت که این مورد نیز باعث صرفه جویی بسزایی در زمان و بار وارده به سرور خواهد شد.
از دیگر مواردی که می توان به آن اشاره نمود بهینه سازی ساختار دیتابیس با اعمال موارد زیر است:
1- تا حد ممکن جداول دیتابیس را کوچک نمایید:
این مورد تاثیر چشمگیری در میزان استفاده از RAM و I/O سرور دارد و علاوه بر این موجب کمتر شدن تعداد Index ها می شود.
2- استفاده از procedure ANALYSE :
این مورد بازخوردی از اجرای هر query میدهد. در حقیقت این پرویسجر بعد از آنالیز data های موجود در جداول راهکارهایی ارائه میدهد که باعث شده تا data ها بهینه و جداول کوچکتر شوند. جهت استفاده از این پرویسجر آن را در انتهای دستور select با فرمت زیر بکار ببرید:
SELECT ... FROM ... WHERE ... PROCEDURE ANALYSE([max_elements,[max_memory]])
بصورت مثال :
SELECT col1, col2 FROM table1 PROCEDURE ANALYSE(10, 2000);
توجه داشته باشید در صورتی که تعداد زیادی جدول در یک دیتابیس داشته باشید اعمال open, close, and create بر روی آنها کند و زمان بر خواهد بود.
در ادامه به موارد زیر حتما توجه خاص مبذول دارید:
بعد از باز شدن هر connection به دیتابیس سرور حتما در برنامه نویسی دقت نمایید که connection مربوطه بسته شود.
در phpmyadmin این امکان وجود دارد که در هر دیتابیس table های مورد نظر را انتخاب نموده و با استفاده از گزینه Optimize Table جداول مربوطه را بهینه سازی نمود.
همچنین در صورت تمایل شما می توانید سرویس خود را به سرویس های VIP تغییر دهید. در سرویس های VIP ضریب اشتراک بسیار کم بوده و در نتیجه منابع بیشتری در اختیار شما قرار خواهد گرفت. همچنین دیتابیس شما نیز در سرور اختصاصی و مجزایی میزبانی می گردد. در این حالت سایت شما می توانید بدون اینکه موجب ایجاد اختلال بر روی سایت دیگری گردد، منابع بسیار بیشتری مصرف نماید