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

تورج عزیزی

تورج عزیزی

مشاوره، تحقیقات و انجام پروژه در زمینه SQL Server Performance Tuning

10 Comments

  1. محمد مزیدی

    محمد مزیدی

       با سلام

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

    There are two kinds of the temporary tables: local and global. Local temporary tables are named starting with the # symbol, and they are visible only in the session in which they were created and in the modules called from that session

    Global temporary tables are created with the names starting with ## symbols, and they are visible to all  sessions

    In order to improve performance, SQL Server introduces the concept of temporary table caching. This term is a bit confusing. It relates to temporary table allocation rather than  data pages, which are cached in a buffer pool, similar to regular tables

    In a nutshell, with temporary table caching, instead of dropping the table, SQL Server truncates it, keeping two pages per index pre-allocated: one IAM and one data page. The next time the table is created, SQL Server will reuse these pages, which helps reduce the number of modifications required in the allocation map page

    SQL Server does not cache IAM and data pages for global temporary tables nor does it cache local temporary tables created in the session scope. Only the temporary tables created within the stored procedures and triggers are cached

    There are also a few requirements of the table and code, including

    The table needs to be smaller than eight megabytes. Large tables are not cached
      
    There are no DDL statements that change the table structure. Any schema modification    statements in the code, with exception of DROP TABLE, will prevent a temporary table caching .However, you can create indexes on the table and, as mentioned previously, SQL Server will cache them
    There are no  named constraints defined in the table. Unnamed constraints will not prevent the caching 

    پاسخ دادن
  2. فرشید علی اکبری

    فرشید علی اکبری

     سلام آقای عزیزی

    تشکر از مقاله بسیار کارآمد و خوبی که ارائه دادید و به نکته خوبی اشاره کرده بودید.
    من یک سئوال از خدمت شما دارم و اون اینکه: با توجه به اینکه نصب اسکوئل سرور ۲۰۱۶ با نسخه های قبلی کمی متفاوت تر شده، اگه نصبش کرده باشید حتماً متوجه شدید که مسیر Tempdb را به همراه تعداد Data File هایی که می تونه باعث تاثیر بسزایی در Performance باشه ( و اگه درست خاطرم باشه حداکثر تا ۸ دیتافایل) می تونید براش ایجاد کنید. شما فکر میکنید با چه معیاری باید دقیقاً تعیین کنیم که آیا بانک اطلاعاتی ما، با توجه به اینکه مسیر Tempdb را تغییر داده ایم ولی نیاز به تعیین دیتا فایل در نسخه ۲۰۱۶ داره یا نه؟ و اگه داره تعداد اون رو برچه مبنایی باید تعیین کنیم؟
    پاسخ دادن
  3. Hamid J. Fard

    Hamid J. Fard

        با سلام 

    مقاله خوبی است.
    البته این نکته رو بگم که در مورد استفاده نکردن از Clustere Index ها – داده ها Cache نمی شوند بلکه Stabe Plan ساخته شده دوباره استفاده میشود. و اینکه دادهای کمتر از ۸ مگابایت داخل حافظه هستند و در tempdb نوشته نمی شوند به غیر از قسمت لاگ تراکنش و Structure جدول. 
    فرشید علی اکبری: برای هر پردازنده یک دیتا فایل و حداکثر ۸. این به دلیل وجود Parallel Execution Plan ها است.
    پاسخ دادن
  4. مسعود طاهری

    مسعود طاهری

    دوستان عزیز برای مشاهده پیج های allocated شده و deallocated شده به ازای هر Session در بانک اطلاعاتی TempDB می توانید از ویو dm_db_session_space_usage استفاده کنید به مثال زیر توجه کنید

        USE master

    GO
    —ایجاد جدول موقت
    CREATE TABLE #TempTable ( ID INT ,Name char(8000)) ;
    GO
    —درج رکورد تستی
    INSERT INTO #TempTable ( ID,Name ) VALUES ( 1,’AAAAAA’ ) ;
    INSERT INTO #TempTable ( ID,Name ) VALUES ( 2,’BBBBBB’ ) ;
    INSERT INTO #TempTable ( ID,Name ) VALUES ( 3,’CCCCCC’ ) ;
    GO
    —تعداد پیج های تخصیص یافته
    SELECT 
        session_id,
        database_id,
        DB_NAME(database_id),
        user_objects_alloc_page_count
    FROM sys.dm_db_session_space_usage
    WHERE session_id =@@SPID ;
    GO
    —مشاهده پیج ها مربوط به جدول
    DBCC IND(‘TEMPDB’,’#TempTable’,-1)
    GO
    —مشاهده محتوای پیج
    DBCC TRACEON(3604)
    DBCC PAGE(‘TEMPDB’,1,341,3)
    GO
    –مشاهده لاگ های درج شده در لاگ فایل
    USE tempdb
    GO
    SELECT [Current LSN],[Transaction ID],Operation FROM SYS.fn_dblog(NULL,NULL)
    ضمنا یکی از مهمترین دلایل افزایش دیتا فایل های TempDB کاهش Latch Contention می باشد.
    پاسخ دادن
  5. مهران رحمتی

    مهران رحمتی

       سلام

    مقاله بسیار عالی و کاربردی بود
    سپاسگذار
    پاسخ دادن
  6. تورج عزیزی

       فرشید علی اکبری:

     با ۸ فایل شروع کنید و مانیتور کنید، در صورت وجود Bottleneck ، 
    4 فایل اضافه کنید و دوباره بررسی کنید  وجود Bottleneck را چک کنید و این روند را تا زمانی که  Bottleneck از بین برود ادامه دهید.
    پاسخ دادن
  7. حسن ضرابی

    حسن ضرابی

       با سلام

    من تست کردم بر روی سرعت خیلی تاثیر گذار است واقعا از مقاله خوبتون ممنونم

    با تشکر از شما

    پاسخ دادن

ارسال نظر

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

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