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