• 1401/09/09

طول كشيدن اجراي كوئري :

سلام . دوستان يك مشكلي برام ايجاد شده . 

من دو تا ديتابيس كاملا يكسان دارم ( از لحاظ جداول )

در واقع ديتابيس دوم رو از اولي بازيابي كردم . ولي ديتاي درون ديتابيس دوم با اولي فرق داره . (‌حدود 1 ميليون ركورد مختلف داخلش هست كه مهم نيست ) 

يه كوئري روي ديتابيس اولي ميزنم زير 15 ثانيه بهم خروجي ميده ، همونو روي دومي ميزنم 8 تا 10 دقيقه طول ميكشه! 

ايندكس هم روي جداولم گذاشتم و يكيه . منتهي Live Query Statistics رو كه ميبينم ، براي ديتابيس اولي كه كوئري داره اجزا ميشه ، از يك قابليتي به نام Parallerism استفاده ميكنه ولي در دومي استفاده نمي كنه . به نظر مشكل از چيه؟ تشكر 

  • 1401/09/09
  • ساعت 22:01

من این موارد رو بررسی کردم ولی باز هم مشکل داره...

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

رفتم سراغ جداول ، یکبار ایندکس هارو پاک کردم دوباره گذاشتم ، نشد 

ایندکس هارو Rebuild کردم نشد.

دیتابیس رو پاک کردم از بک آپ ریختم ، نشد.

جداول مرتبط با کوئری رو پاک کردم و دوباره دستی ساختم ، و ایندکس هاشو Set کردم ، نشد.

دیگ موندم چرا یک کوئری یکسان ، توی ی دیتابیس سریع اجرا میشه ، توی اون یکی که بازیابی شده همینه ، ولی مثلا دیتای داخلش متفاوته ، ولی نصف اون یکیه ، 10 دقیقه طول می کشه!

https://stackoverflow.com/questions/69201574/the-same-sql-runs-at-very-different-speed-in-two-databases

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


  • 1401/09/10
  • ساعت 13:03

با سلام و احترام خدمت شما دوست عزیز

با توجه به اینکه حدودا 1 میلیون رکورد داخل این دوتا جدول متفاوته باید بررسی بشه
با توجه به دیتای دو جدول کوئری های شما متفاوت خواهد بود

با تشکر از شما


  • 1401/09/10
  • ساعت 13:30

نه حل شد دوستان . 

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

دیتابیس ابتدائی بر روی sql server 2019 ساخته شد و روی جداولش هم ایندکس گذاری شده بود . برای سال های بعدی هم بک آپ این دیتابیس گرفته می شد و برای سال های بعدی  این دیتابیس از روی بک آپ بازیابی می شد و دیتای داخل جداولش پاک می شد تا قابل استفاده باشه . 

منتهی یک مشکلی پیش میاد ، Sql Server وقتی بک آپ رو از فایل .bak بازگردانی می کنه ، Compatibility Level اون دیتابیس رو روی کمترین ورژن Sql Server که 2008 هست قرار میده . در صورتیکه ایندکس گذاری ها و ایجاد جداول  و .... دیتابیس اصلی ما روی Sql Server 2019 بوده . 

همین امر باعث میشه تا سرعت اجرای یک کوئری روی دو دیتابیس کاملا یکسان ، متفاوت بشه . 

حالا برای اینکه Compatibility Level رو در دیتابیس دوم ، درست کنیم ، روی دیتابیس کلیک راست می کنیم ، Properties رو انتخاب می کنیم ، از منوی بازشده Options رو می زنیم و Compatibility Level رو ، متناسب با Sql Server ای که نصب داریم ، قرار می دهیم . برای من 2019 بود و روی 2019 گذاشتمش . 

سرعت اجرای کوئری عین دیتابیس اصلی شد . 

 


  • 1401/09/11
  • ساعت 20:18

با تشکر از شما دوست عزیز بابت به اشتراک گذاری پاسختون

موفق  باشید دوست عزیزم