سلام . دوستان يك مشكلي برام ايجاد شده .
من دو تا ديتابيس كاملا يكسان دارم ( از لحاظ جداول )
در واقع ديتابيس دوم رو از اولي بازيابي كردم . ولي ديتاي درون ديتابيس دوم با اولي فرق داره . (حدود 1 ميليون ركورد مختلف داخلش هست كه مهم نيست )
يه كوئري روي ديتابيس اولي ميزنم زير 15 ثانيه بهم خروجي ميده ، همونو روي دومي ميزنم 8 تا 10 دقيقه طول ميكشه!
ايندكس هم روي جداولم گذاشتم و يكيه . منتهي Live Query Statistics رو كه ميبينم ، براي ديتابيس اولي كه كوئري داره اجزا ميشه ، از يك قابليتي به نام Parallerism استفاده ميكنه ولي در دومي استفاده نمي كنه . به نظر مشكل از چيه؟ تشكر
من این موارد رو بررسی کردم ولی باز هم مشکل داره...
قاعدتا مشکل از کوئری نیست چون توی ی دیتابیس داره بدرستی کار می کنه .
رفتم سراغ جداول ، یکبار ایندکس هارو پاک کردم دوباره گذاشتم ، نشد
ایندکس هارو Rebuild کردم نشد.
دیتابیس رو پاک کردم از بک آپ ریختم ، نشد.
جداول مرتبط با کوئری رو پاک کردم و دوباره دستی ساختم ، و ایندکس هاشو Set کردم ، نشد.
دیگ موندم چرا یک کوئری یکسان ، توی ی دیتابیس سریع اجرا میشه ، توی اون یکی که بازیابی شده همینه ، ولی مثلا دیتای داخلش متفاوته ، ولی نصف اون یکیه ، 10 دقیقه طول می کشه!
https://stackoverflow.com/questions/69201574/the-same-sql-runs-at-very-different-speed-in-two-databases
توی لینک بالا هم همین مورد رو یکی برخورده
با سلام و احترام خدمت شما دوست عزیز
با توجه به اینکه حدودا 1 میلیون رکورد داخل این دوتا جدول متفاوته باید بررسی بشه
با توجه به دیتای دو جدول کوئری های شما متفاوت خواهد بود
با تشکر از شما
نه حل شد دوستان .

یک مورد خیلی جالبی بود ، میگم شاید باقی دوستان هم بهش برخورد کنن بعدا .
دیتابیس ابتدائی بر روی sql server 2019 ساخته شد و روی جداولش هم ایندکس گذاری شده بود . برای سال های بعدی هم بک آپ این دیتابیس گرفته می شد و برای سال های بعدی این دیتابیس از روی بک آپ بازیابی می شد و دیتای داخل جداولش پاک می شد تا قابل استفاده باشه .
منتهی یک مشکلی پیش میاد ، Sql Server وقتی بک آپ رو از فایل .bak بازگردانی می کنه ، Compatibility Level اون دیتابیس رو روی کمترین ورژن Sql Server که 2008 هست قرار میده . در صورتیکه ایندکس گذاری ها و ایجاد جداول و .... دیتابیس اصلی ما روی Sql Server 2019 بوده .
همین امر باعث میشه تا سرعت اجرای یک کوئری روی دو دیتابیس کاملا یکسان ، متفاوت بشه .
حالا برای اینکه Compatibility Level رو در دیتابیس دوم ، درست کنیم ، روی دیتابیس کلیک راست می کنیم ، Properties رو انتخاب می کنیم ، از منوی بازشده Options رو می زنیم و Compatibility Level رو ، متناسب با Sql Server ای که نصب داریم ، قرار می دهیم . برای من 2019 بود و روی 2019 گذاشتمش .
سرعت اجرای کوئری عین دیتابیس اصلی شد .
با تشکر از شما دوست عزیز بابت به اشتراک گذاری پاسختون
موفق باشید دوست عزیزم