درباره نویسنده

Hamid J. Fard

Hamid J. Fard

متخصص پایگاه داده SQL Server دارای مدارک معتبر مایکروسافت از قبیلMicrosoft Certified Master: SQL Server 2008 و Microsoft Certified Solutions Master: Charter - Data Platform. من در گروههای کاربران SQL Server در کشور مالزی و سنگاپور به صورت فعال صحبت و آموزش می دهم.

18 Comments

  1. Hamid J. Fard

    Hamid J. Fard

        فکر کنم مقاله به صورت کامل انتشار نیافته. لطفا یک چکی بکنید.

    پاسخ دادن
    1. فرید طاهری

      فرید طاهری

         اصلاح گردید. با تشکر

      پاسخ دادن
      1. Hamid J. Fard

        Hamid J. Fard

            ممنون. این مشکل ذخیره سازی مقالات رو هم اگر لطف کنید درستش کنید ممنون می شم.

  2. تورج عزیزی

        سلام

    ممنون بابت مقاله،
    اگر یک تراکنش DELETE به شکل EXPLICIT اجرا شود و و Commit اجرا نشود، آیا این رکورد باز هم به شکل فیزیکی حذف می شود؟
    پاسخ دادن
    1. مسعود طاهری

      مسعود طاهری

      حمید عزیز خیلی عالی بود

      تورج عزیز یک نگاهی به لینک های زیر بیاندازید. مثال اون رو یه کوچولو تغییر بدهید متوجه پاسخ سوالتون می شوید. (Transaction را Commit نکنید و محتوای لاگ را بررسی کنید)
      در تکمیل مطلب (حالت هایی که Ghost Recordها پاک می شوند)
      در تکمیل مقاله حمید عزیز حتما به مطلب زیر هم نگاه کنید

      مقاله زیر یک Trace Flag را معرفی کرده که در عملکرد پروسه Ghost Record تاثیر می گذارد البته نباید اون را همینطوری روی سرور فعال کرد.
      پاسخ دادن
      1. Hamid J. Fard

        Hamid J. Fard

        ممنون بابت لینکها. 

    2. Hamid J. Fard

      Hamid J. Fard

      تورج: خیر به صورت فیزیکی حذف نمیشه.

      پاسخ دادن
  3. تورج عزیزی

    تورج عزیزی

        فرض کنید تراکنش commit شد رکورد به طور فیزیکی حذف شد و قبل از Checkpoint ،

    در SQL Server حالت crash اتفاق افتاد، پس از  Start دوباره SQL Server، در فاز Recovery باید رکورد های لاگ پس از آخرین Checkpoint دوباره اجرا شوند. در اینجا رکورد به صورت فیزیکی پاک شده چطور SQL Server می تونه اون رکورد رو به شکل حذف شده در Page مربوطه نشون بده؟
    امیدوارم سوالم رو خوب رسونده باشم.

    پاسخ دادن
    1. Hamid J. Fard

      Hamid J. Fard

      اگر قبل از Checkpoint کرش کنه. یعنی Page مورد نظر روی دیسک Flush نشده. پس بعد از شروع دوباره SQL Server در قسمت REDO تراکنشهای بعد از اخرین CHeckpoint دوباره اجرا می شه. در Error Log شما پیغامهایی با مضنون Transaction Forwarded مواجه می شود. حالا در قسمت Redo در حقیقت SQL Server آن Page مورد نظر را در حافظه بارگذاری کرده و تغییرات را انجام می دهد و در آخر یک عملیات Checkpoint انجام می شود.

         
      پاسخ دادن
    2. Hamid J. Fard

      Hamid J. Fard

          البته این رو هم در نظر داشته باشید که تا موقعی که Ghost Cleanup Task اجرا نشه رکورد به صورت فیزیکی هنوز حذف نشده.

      پاسخ دادن
  4. تورج عزیزی

       پس می توان گفت که Ghost Cleanup Task فقط رکوردهایی را حذف می کند که بعد از ثبت لاگ آنها حتماً CheckPoint اتفاق افتاده، اگه اینطوره بگو که بگم دوستت دارم!

    پاسخ دادن
  5. Hamid J. Fard

    Hamid J. Fard

        تورج عزیز: متاسفانه اشتباه فرمودید. Checkpoint و Ghost Cleanup Task دو Thread متفاوت هستند و به صورت Asynchronous اجرا می شوند. Ghost Cleanup Task فقط Slot Offset را از Data Page حذف می کند ولی این عملیات قبل از Checkpoint انجام می شود و فقط در حافظه سیستم است. وقتی LazyWriter اجرا می شود Data Page ها از حافظه به دیسک Flush شده و نوع آنها از کثیف به تمیز تبدیل می شود.

    در نظر داشته باشید که Checkpoint فقط داده های کثیف را وارد دیسک می کند اما نوع آنها را از کثیف به تمیز تغییر نمی دهد.
    اینجور مباحث رو نمیشه به صورت نوشتاری توضیح داد. باید حتما رو در رو و با یک تخته وایت برد توضیح بدم. 
    «دوستت دارم!» یادت نره!
    پاسخ دادن
  6. تورج عزیزی

    Excellent!
       دوستت دارم، این کاره!

    پاسخ دادن
    1. Hamid J. Fard

      Hamid J. Fard

          تورج عزیز: ممنون. 🙂

      پاسخ دادن
  7. MEHDI

    MEHDI

    سلام عالی بود
    میتونید برای بقیه عملیات مثه اضافه کردن یا آپذیت هم ی مقاله کامل و مفصل بزارید

    پاسخ دادن
    1. Hamid J. Fard

      Hamid J. Fard

      سلام

      اگر وقتی بود حتما آماده می کنم.
      با تشکر
      پاسخ دادن
  8. حسن ضرابی

    حسن ضرابی

    با سلام و خسته نباشید خدمت شما
    از بابت این مقاله بسیار عالی بسیار عالی واقعا ممنونم فقط یک سئوال داشتم و آن این هست که اگر کل رکوردها به صورت فیزیکی اگر حذف بشوند نه یک page چه کوئری را باید اجرا کنیم
    برای مثال چون در یک page آیتمی وجود دارد به نام m_ghostreccnt که اگر مساوی با ۰ بود یعنی اطلاعات آن page به صورت فیزیکی حذف شده است حالا آیا کوئری وجود دارد که بشود در کل page ها این کار را انجام داد یعنی مثلا بفهمیم که کل اطلاعات به صورت فیزیکی حذف شده است برای کل اطلاعات منظورم هست.

    با تشکر از شما

    پاسخ دادن

ارسال نظر

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

تمامی حقوق مادی و معنوی این وب سایت متعلق به نیک آموز می باشد.
این سایت توسط تیم آموزش برنامه نویسی نیک آموز مدیریت می شود.

دانلود فیلم‌ وبینارهای نوروزی نیک آموز | دانلود کنید، تماشا کنید، لذت ببرید
دانلود تمام فیلم ها بصورت رایگان
close-image