Stackoverflow copy - paste

Gondoltam, ez megér egy blog posztot. Sokan gondolkodás nélkül használják a munka hevében a Stackoverflow cikkek elfogadott válaszát. 

Ezzel én is így voltam, MSSQL-ben szeretnék számolni tábla és indexméreteket. Az egyik nagy táblánál bújt ki a szög a zsákból, amikor az egyik táblára azt mondta a lekérdezés, hogy 400 millió GB méretű a tábla. 

Először is a lekérdezés:

;with
    cte
    as
    (
        SELECT
            t.name as TableName,
            SUM (s.used_page_count) as used_pages_count,
            SUM (CASE
               WHEN (i.index_id < 2) THEN (in_row_data_page_count + lob_used_page_count + row_overflow_used_page_count)
               ELSE lob_used_page_count + row_overflow_used_page_count
           END) as pages
        FROM sys.dm_db_partition_stats  AS s
            JOIN sys.tables AS t ON s.object_id = t.object_id
            JOIN sys.indexes AS i ON i.[object_id] = t.[object_id] AND s.index_id = i.index_id
        WHERE t.name IN (...)
        GROUP BY t.name
    )
   ,
    cte2
    as
    
    (
        select
            cte.TableName,
            (cte.pages * 8.) as TableSizeInKB,
            ((CASE WHEN cte.used_pages_count > cte.pages 
                   THEN cte.used_pages_count - cte.pages
                   ELSE 0 
             END) * 8.) as IndexSizeInKB
        from cte
    )
select TableName, TableSizeInKB, IndexSizeInKB,
    case when (TableSizeInKB+IndexSizeInKB)>1024*1024 
  then cast((TableSizeInKB+IndexSizeInKB)/1024*1024 as varchar)+'GB'
  when (TableSizeInKB+IndexSizeInKB)>1024 
  then cast((TableSizeInKB+IndexSizeInKB)/1024 as varchar)+'MB'
  else cast((TableSizeInKB+IndexSizeInKB) as varchar)+'KB' end [TableSizeIn+IndexSizeIn]
from cte2
order by 2 desc

Oké, hogy ez a legnagyobb tábla, de akkor is.

A [TableSizeIn+IndexSizeIn] mező számítását sikerült elbaltázni, de nem is kicsit. Annak is csak GB-ban mért részét, emiatt nem is feltűnő a hiba, viszont utána elég ciki kimagyarázni az erre alapozott kimutatásokat.  

Hozzászólások

Vizsgalta valaki mar, hogy mennyire optimalis/jo/biztonsagos a sok elfogadott kodreszlet?

Vajon hany tamadast inditottak vagy segitettek veghezvinni ezek a kodreszletek?

Baby boom (boomer) vagy. :)

Aki senior/ninja az csak inspirálódik stackoverflow-ról. Az első 10 évben simán bele lehet hülyeségekbe csúszni.

Fentebbre:
Hogy mi szűri a felplusszolt megoldásokat? 'Hát a közösségnek kellene. Ha nem megy negatívba, akkor adott területet kevesen ismernek, vagy éppen kevesen vannak hozzá a közösségben, hogy átbillentsék. Igaz, ott az edit, de csak ha bizonyítottad szakértelmed.

Szerk.:
pityulaman1983 nem akartam félreérthető lenni. Király, hogy levágtad. Én csak akkor írok ma már SQL-t ha szólnak, hogy WTF, vagy ha valami extra dolgot kérnek, amit adminból nem tudnak kiolvasni.
Tehát ha ide írtad, akkor nyilván az SO-n is jelezted.
sry.

Biztos, hogy nem én gonoszoltam le!