PDA

View Full Version : سوال در مورد SQL_CACHE



e601
یک شنبه 27 اسفند 1391, 10:28 صبح
سلام

در یکجایی خوندم که استفاده از عبارت SQL_CACHE در دستور select در mysql باعث میشه که عمل کش شدن بصورت خودکار توسط mysql انجام بشه. آیا این درسته و کسی تا حالا از این روش استفاده کرده؟

در خود سایت mysql هم دقیقا همین رو توضیح داده. این صفحه (http://dev.mysql.com/doc/refman/4.1/en/query-cache-in-select.html) و این صفحه (http://dev.mysql.com/doc/refman/5.1/en/query-cache-in-select.html)

مثالی هم که زده به این صورته :

SELECT SQL_CACHE id, name FROM customer;

e601
یک شنبه 27 اسفند 1391, 11:38 صبح
در واقع مشکل من اینه که سایتی دارم که ظاهرا بخاطر طراحی غیر اصولی cms ، در بازدید بالا به مشکل خورده و به دلیل کوئری های زیادی که برای هر صفحه به دیتابیس میفرسته سرور رو دچار اختلال کرده !

قضیه یه جوریه که یا خودم باید یه جوری حلش کنم یا سرور رو ارتقا بدم و هزینه الکی کنم !

111qqq
یک شنبه 27 اسفند 1391, 17:45 عصر
اره درسته ... ولی توی تیبل های بزرگ بدرد میخوره (مثلا تیبلی که حدود 800.000 رکورد داره ) البته بستگی به ساختار تیبل داره که چنقدر هر رکوردش ستون داشته باشه و بزرگ باشه ....

ولی این نیست که چون کوئری هات زیاده مشکلت رو حل کنه ..... باید کوئری ها رو بهینه کنی ..... اینم یادت باشه ... با اینکدس سازی توی جداول مشکل تیبل های بزرگ رو هم معمولا حل میشه

e601
یک شنبه 27 اسفند 1391, 18:13 عصر
ببینید مشکل تعداد زیاد رکورد و فیلد در یک جدول یه بحثه ، تعداد زیاد کوئری از طرف سایت برای دیتابیس هم یه بحثه. فرض کن شما یکسری صفحاتی در سایتت داری که مثلا در هر صفحه 10تا کوئری (برای دریافت اطلاعات مختلفی که نیاز هست در صفحه نمایش داده بشه) به سمت دیتابیس فرستاده میشه. حالا فرض بگیر این صفحاتت در روز مثلا 20هزار بار بازدید میشه. بنابراین نتیجه اینه که روزانه 200هزار درخواست از سمت سایت برای دیتابیس ارسال میشه که میتونه مشکل ساز بشه.

در این صفحه (http://forum.majidonline.com/threads/142012-استفاده-از-سیستم-کش-در-cms) یه روش کش کردن معرفی شده که جناب شهرکی (مدیر همین تالار) هم در اون شرکت کردن.

میخوام ببینم فرق روشی که در اون صفحه معرفی شده با روش SQL_CACHE خود mysql چیه؟ اگه به راحتی با قرار دادن عبارت SQL_CACHE داخل رشته کوئری میشه به همون نتایج رسید چرا انجامش ندیم؟

MMSHFE
دوشنبه 28 اسفند 1391, 00:11 صبح
بهتره کوئریها رو بهینه کنید و جداول به شکل مناسب اندیس گذاری بشن چون استفاده بی رویه از کش MySQL هم باعث مصرف RAM و Disc خواهد شد. تفاوت دو روش هم در اینه که در SQL_CACHE فقط نتیجه Query توی کش قرار میگیره و دیگه دوباره عمل جستجو توی دیتابیس انجام نمیشه و همون محتوای کش شده به PHP تحویل داده میشه ولی بقیه عملیات که مربوط به ساخت صفحه و استفاده از خروجی MySQL و fetch کردن رکوردها و نمایش نتایج هست، باید انجام بشه اما در روشی که توی لینکی که گذاشتین بهش اشاره کردم، کل صفحه کش میشه و توی فایل قرار میگیره و تا وقتی اطلاعات تغییر نکرده، همون صفحه ذخیره شده نشون داده میشه و اگه اطلاعات تغییر کنه هم صفحه کش شده پاک میشه تا در درخواست بعدی، اطلاعات از دیتابیس خونده بشه و مجدداً فایل کش از روی اون تولید بشه.
موفق باشید.

e601
دوشنبه 28 اسفند 1391, 00:45 صبح
کاملا متوجه شدم.
با تشکر فراوان...