PDA

View Full Version : تفاوت زمان در اجرای دستورات Query



sadaf_
یک شنبه 14 اسفند 1390, 12:56 عصر
سلام
من یک select رو برای بار اول که اجرار می کنم 10 ثانیه طول می کشه ولی برای بار دوم به بعد کمتر از یک ثانیه!!!
در چه حالتی ممکنه چنین اتفاقی بیافته؟
آیا موتور sql درگیر چیزی هست که آزاد می شه؟

micro24
یک شنبه 14 اسفند 1390, 22:47 عصر
سلام
بار اول که دستورات اجرا می کنید یکسری از اطلاعات جدید هست و هنوز در کش قرار نداره دفعه دوم که اجرا می کنید خیلی از اطلاعات در کش قرار دارد بخاطر همین سرعت اجرا بالاتر می رود.

مرتضی تقدمی
یک شنبه 14 اسفند 1390, 23:14 عصر
سلام
درسته. این امر در برنامه ها و نرم افزارها هم مشاهده می شود.
موفق باشید

Felony
دوشنبه 15 اسفند 1390, 09:52 صبح
از Store Procedure استفاده کنید تا بعد از ساخت اون یک Scheam کلی از Query تون ساخته بشه و هر بار SQL مجبور به Parse دستورات و ... نشه و فقط پارامترها به Procedure فرستاده بشه , این مورد یکی از دلایل برتری سرعت SP ها نسبت به Query های معمول هست .

sadaf_
دوشنبه 15 اسفند 1390, 10:46 صبح
sql موتور کمکی داره؟

tiphooo
دوشنبه 15 اسفند 1390, 18:54 عصر
سلام
بار اول که دستورات اجرا می کنید یکسری از اطلاعات جدید هست و هنوز در کش قرار نداره دفعه دوم که اجرا می کنید خیلی از اطلاعات در کش قرار دارد بخاطر همین سرعت اجرا بالاتر می رود.

اگر دستورات ما یک SELECT ساده باشد و هر دو بار آن را اجرا کنیم چه تضمینی وجود دارد که اطلاعات جدول به کلی دگرگون نشده باشد و چیزی که در Cash است کاملا نامعتبر شده باشد؟
حال اینکه اگر بخشی از جواب از Cash خوانده شود قاعدتا پروسه مقایسه خروجی جدید با اطلاعات Cash شده نیز به پروسه واکشی اضافه می شود و ظاهرا زمان بیشتری لازم خواهد داشت
چه توجیهی برای این وجود دارد؟

baktash.n81@gmail.com
شنبه 20 اسفند 1390, 10:01 صبح
سلام

این که مشخص هست دفعه دوم SQL از کش می خونه اطلاعات رو ... در واقع یه جورایی SQL نتایج Query شما رو تو کش نگه می داره ... ... اگه می خواین امتحان کنید همون Query رو با پارامترهای دیگه که نتایجش با قبلی فرق کنه اجرا کنید ...!
هم اینکه SQL علاقه زیادی به نگهداری Index ها رو کش داره ممکنه دفعه اول هنوز Index ها کش نشده باشه ... اگه بیشترین فضای مجاز ram رو برای SQL دستی تنظیم نکنید یهو می بینین 64 gig ... رم رو هم پر کرده براتون ...

اما اگه واقعا انقدر نتایج از نظر زمانی باهم فرق می کنه یعنی یکدهم می شه ... ممکنه مشکل از سرعت پایین هارد درایو هم باشه ...

اما در خصوص اینکه مقدار های موجود توی کش رو چه جوری SQL با مقدار های واقعی Sync می کنه رو هم می تونید امتحان کنید یعنی Query رو اجرا کنید بعد یه عمل Insert یا Update انجام بدید ببینید که آیا دوباره سرعت کم می شه یا خیر ...

الگوریتم هایی که SQL برای انجام Query ها در پشت صحنه انجام می ده یه مقداری پیچیده تر از اینا هست که ما بتونیم اینجا راجع بهش بحث کنیم ... فقط می تونیم تست کنیم و بفهمیم که برای ما کدوم روش مناسبه ...

نکته آخر می تونید از Execution Plan برای اینکه ببینید بیشترین زمان کجا صرف شده هم استفاده کنید ...

sadaf_
دوشنبه 22 اسفند 1390, 11:05 صبح
آیا می شه همه Select ها را برای یک بار در کش اجرا کرد و دفعه بعدی که خواستیم به کاربر اطلاعات را نمایش بدیم
select می کنیم و چون در کش وجود داره سرعت بیشتره

baktash.n81@gmail.com
سه شنبه 23 اسفند 1390, 08:54 صبح
در واقع نه چون مدیریت حافظه رو خود Sql انجام می ده و ما ابزاری برای کنترلش نداریم ... البته من بلد نیستم ... شاید هم باشه ...

یوسف زالی
سه شنبه 23 اسفند 1390, 16:42 عصر
سلام.
یک راهش استفاده از ویو هاست.
ویو ها بعد از کامپایل شدن به صورت کامپایل شده استفاده می شن.
البته باید پارامتر ها رو همچنان خارج از ویو بنویسید.
راه دیگه استفاده از SP هاست.
اما باز هم مرتبه اول با دوم فرق خواهد داشت.