none
delete e tablock hint RRS feed

  • Domanda

  • ciao a tutti,

    ho letto diversi articoli dove applicando l'hint TABLOCK ad una delete lo spazio allocato nell'heap dei record eliminati viene rilasciato.

    questo è solo uno degli articoli:
    https://www.sqlservercentral.com/Forums/Topic654530-146-1.aspx

    questo è la pagina microsoft dove viene indicato questo comportamento nel paragrafo "Comportamento di blocco":
    https://docs.microsoft.com/it-it/sql/t-sql/statements/delete-transact-sql?view=sql-server-2017


    qui ho replicato il caso, ma proprio non funziona:

    USE CREDITY_ODS
    GO
    DROP TABLE if exists TheTable
    GO

    CREATE TABLE TheTable
    (
    ID INT IDENTITY(1,1),
    Data VARCHAR(2000) 
    )
    GO

    set nocount on
    INSERT INTO TheTable (Data) VALUES ('SomeData') 
    GO 1000

    --
    select COUNT(*) from TheTable 

    --method 1
    exec sp_spaceused TheTable, 'true'
    go

    -- method 2
    SELECT DDIPS.index_id
         , DDIPS.index_type_desc
         , DDIPS.page_count
         , DDIPS.record_count
      FROM sys.dm_db_index_physical_stats( DB_ID(), OBJECT_ID(N'dbo.TheTable', N'U'), 0, NULL, N'DETAILED' ) AS DDIPS

    -- method 3
    DBCC IND ('CREDITY_ODS','TheTable',-1)
    GO

    -- delete
    -- repeat method 1 or 2 or 3
    DELETE FROM TheTable WITH (TABLOCK) 
    go

    -- truncate
    -- repeat method 1 or 2 or 3
    TRUNCATE TABLE TheTable 
    go

    dopo aver fatto la delete con tablock le pagine non vengono deallocate, ma solo dopo la truncate.

    Percaso sto sbagliando qualcosa?

    grazie in anticipo.
    D.


    venerdì 28 settembre 2018 10:28

Risposte