PDA

View Full Version : سرعت پایین در استفاده از View



MaryamMarz
سه شنبه 21 مهر 1388, 10:21 صبح
سلام
من یک view دارم که سرعت آن بسیار پایین است. در جدول مربوطه هم حدود 100 تا رکورد دارم. موقع اجرا time out expire میدهد.

محمد سلیم آبادی
سه شنبه 21 مهر 1388, 11:40 صبح
سلام،
به نظرتان پایین بودن سرعت View به چه علتی می توان باشد. یعنی محاسبات خیلی زیادی در این ویو صورت می گیرد یا اینکه جدول با خودش چندین بار Join شده است و...

من تا حالا شده یک جدول را با خودش بیش از 5 الی 6 بار ضرب دکارتی کنم و اینقدر تعداد ستون ها و سطرها زیاد شدن که حافظه کم آمد ولی تا حالا با این نمونه برخورد نکردم.

MaryamMarz
سه شنبه 21 مهر 1388, 11:41 صبح
فایل ضمیمه Execution Plan مربوطه است.

MaryamMarz
سه شنبه 21 مهر 1388, 11:49 صبح
اینم خود view !

MaryamMarz
شنبه 25 مهر 1388, 10:40 صبح
من می خواستم این view را به Indexed View تبدیل کنم. ولی برای این کار تمام فانکشن های استفاده شده در view هم باید indexed بشن. مشکل اینجاست که در اکثر این فانکشن ها از همین view استفاده شده. من view را بدون فانکشن ها به صورت indexed ساختم. بعد function ها رو ساختم. حالا نمی تونم از این فانکشن ها استفاده کنم چون Alter view کار نمی کنه!
Cannot ALTER 'dbo.JobCateGoryRecord1' because it is being referenced by object 'GetMasterIDFromJobCategory1'.

اگه راهی به نظرتون میرسه ممنون میشم بگید.

AminSobati
شنبه 25 مهر 1388, 13:15 عصر
سلام دوست عزیزم،
من به توابعی که استفاده شده مشکوکم! سعی کنید یکی یکی توابع رو از Query خارج کنید و سرعتش رو آزمایش کنین. ضمنا این Plan که ارسال کردین Actual هست یا Estimated؟

MaryamMarz
شنبه 25 مهر 1388, 13:58 عصر
سلام و خیلی ممنون از جوابتون :لبخندساده:
این Estimated Plan است. من Function ها رو هم پست می کنم. اگه می شه بگید چه جوری می تونم اینا رو حذف کنم.

AminSobati
شنبه 25 مهر 1388, 17:21 عصر
لطفا Actual Plan رو پست بفرمایید

محمد سلیم آبادی
شنبه 25 مهر 1388, 19:27 عصر
امکان داره بفرمایید که این ویو چه کاری را قرار است انجام بدهد؟
شاید اگر هدفهای Query مذکور را مشخص و مرا را با محیط عملیاتی بانکتان و کاری که می خواهید انجام دهین آشنا کنین بتوانم Query های Optimum شده ای ایجاد کنم.

MaryamMarz
یک شنبه 26 مهر 1388, 09:14 صبح
من سه تا جدول دارم که یک جدول برای نگهداری رکورد های اصلی(tb_JobCategoryMaster) و یک جدول برای نگهداری رکوردهای فرعی می باشد(tb_JobCategorySubsection). هر رکورد فرعی حتما یک رکورد اصلی مربوط به خودش را دارد. یک جدول هم دارم که به ازای تمام رکوردهای موجود در دو جدول قبلی رکورد دارد. در این ویو می خواهم تمام رکورد های اصلی و فرعی را و یک سری اطلاعات دیگر هم که لازم دارم را داشته باشم. در ضمن رکورد های فرعی به صورت درخت می باشند یعنی با فیلد ParentID به والد خود در همان جدول مربوط می شوند. راستی در هر سه جدول یک ID داریم که با این ID رکورد ها به هم مربوط می شوند. من دیاگرام این سه جدول رو هم میفرستم.

محمد سلیم آبادی
یک شنبه 26 مهر 1388, 14:07 عصر
در جدول JobCategorySubSection یک قید خود مرجع (self-referencing) وجود دارد؟
یعنی ستون ParentID به ستون ID همان جدول متصل است؟

با Diagram خالی این سه جدول کاری نمی شود کرد. مثلا بین دو جدول سمت راست دو اتصال وجود دارد یکی اتصال یک به یک و دیگری یک به چند. و تصویر کلید خارجی و کلید مرجع را مشخص نمی کند!

حد اقل Script کامل این سه جدول را پست می کردین تا کمی وقت رو این موضوع می گذاشتم.

MaryamMarz
یک شنبه 26 مهر 1388, 14:42 عصر
بله. ParentID به ID متصل است.

محمد سلیم آبادی
یک شنبه 26 مهر 1388, 14:50 عصر
نمی دانم چرا ما اصلا دوست ندارم که جامعیت داده ها را در بانکمان اعمال کنیم!

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


Alter Table tb_JobCategorySubSection
Add Constraint Self_Referencing
Foreign Key (ParentID)
References tb_JobCategorySubSection (ID)
ON Delete Cascade
ON Update Cascade


من Script هایی را که ارسال کردین را بررسی خواهم کرد

AminSobati
یک شنبه 26 مهر 1388, 18:51 عصر
در Plan نقطه بحرانی دیده نمیشه. ممکنه توضیح بدین این Query رو از کجا اجرا میکنید که timeout میده؟ آیا Select ساده رو در Management Studio آزمایش کردین؟ مطمئن هستین که مشکل Blocking توسط سایر کاربرها وجود نداره؟

محمد سلیم آبادی
یک شنبه 26 مهر 1388, 20:18 عصر
در Plan نقطه بحرانی دیده نمیشه.

سلام،
من یک کتاب در مورد Query Tunig دارم ولی نتونستم درست بخونم چون زبانم اونقدر قوی نبود.

لطفا در حد دو جمله ی ساده معنی اصطلاح "نقطه ی بحرانی" را توضیح دهین.

AminSobati
یک شنبه 26 مهر 1388, 22:14 عصر
سلام!
خیلی ساده است، یعنی همون گلوگاه! جایی که Query عملیات سنگینی انجام میده و بیشترین زمان روی اون تلف میشه. مثلا یک Sort یا Hash Join سنگین ...