Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

download Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

of 98

Transcript of Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    1/98

    Knowing the Internals,Who Needs SQL ServerAnyway?

    Mark S. Rasmussen – improve.dk

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    2/98

    2

    Whoami

     Tech Lead @ iPaper

    Developer/DBA/Ssadmin/Pro!ec"

    mana#er/$

    %omp.Sci @ Aarhus &niversi"

    Blo##in# a" improve.dk@improvedk

    Au"hor o' "he (rcaMD) pro!ec"

    https://github.com/improvedk/OrcaMDFhttps://github.com/improvedk/OrcaMDF

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    3/98

    *

    Level +,- – mean" "o inspire no"

    "each

    Based on 2--0 R2

    1 have no idea...

    Mos" o' ha" 1 sa is incorrec"

    Disclaimer

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    4/98

    3

    Presen"a"ion a" Miracle (pen 4orld

    )ormall s"ar"ed (rcaMD)

    Backgrond

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    5/98

    ,

    !ld School Qerying

    private static void oldschool(){

    using (var conn =  new  SqlConnection("Data Source= .;Initial Catalog= QD ;! "){

    conn. pen();

    var c# d =  new  SqlCo# # and("S$%$C& ' *ersons"+ conn);var reader=  c# d.$,ecuteeader();

    w hile(reader.ead())Console.- rite%ine(reader"ID"/0  "1 " 0  reader"2a# e"/0  " (" 0  reader"3

    44

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    6/98

    +

    !rca"D# Qerying

    using (var # d5=  new   d5ile(# d5*ath)){

    var scanner=  new  DataScanner(# d5);var row s =  scanner.Scan&a6le("*ersons");

    $ntit7*rinter.*rint(row s);4

    using (var # d5=  new   d5ile(# d5*ath))

    {var scanner=  new  DataScanner(# d5);var row s =  scanner.Scan&a6le("*ersons")

    .- here(, = 8 ,.ield9 short8 (:3ge:) 9

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    7/98

    $ages The 'ounda"ion o' S5L Server s"ora#e

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    8/980

    0672 8"es

    %verything s"ored

    as pa#es

    What Is a $age?

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    9/987

    DB%% 19D

    DB%% PA:;

    DB%% TRA%;(9

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    10/986-

    A8solu"el no documen"a"ion

    A8solu"el necessar 'or parsin#

    $age )eader

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    11/9866

    D;M(

    (rcaMD) Pa#eeader

    *everse %ngineering the)eader

    http://var/www/apps/conversion/tmp/scratch_5/Demos/Reverse%20engineering%20the%20header%20format.sqlhttp://var/www/apps/conversion/tmp/scratch_5/Demos/PageHeader.cshttp://var/www/apps/conversion/tmp/scratch_5/Demos/PageHeader.cshttp://var/www/apps/conversion/tmp/scratch_5/Demos/Reverse%20engineering%20the%20header%20format.sql

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    12/9862

    Poin"s "o 8e#innin#

    o' records in 8od

    DeCnes lo#ical

    order o' records

    Slot Array

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    13/986*

    Da"a records S"ores "a8le da"a

    1nde records S"ores nonclus"ered inde da"a as ell as

    nonElea' level clus"ered inde da"a

    S"ored in "he FixedVar  'orma"

    *ecords

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    14/9863

    #i+edar *ecord #ormat

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    15/98

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    16/98

    6+

    Stats Bits B

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    17/98

    6?

    Bi"map "rackin# he"her columns are

    9&LL

    %;1L

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    18/98

    60

    aria.le Length !/setArray

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    19/98

    67

    %+am-le *ecord

    CREATE TABLERecordTest(

    A int,B int,C char(5),D varchar(10),E varchar(20)

    )

    INSERT INT RecordTest !AL"ES (25, #$, %ABCD%, %&ar'%,%Denar'%)

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    20/98

    2-

    )ied len#"h da"a alas presen" ;ven i' null

    ▪ Thou#h no" necessaril "ail columns

    Haria8le len#"h da"a onl presen" hen no"

    null

    Addin# nulla8le columns is a me"ada"a op Denali de'aul" value columns is me"ada"a "oo

    When Is Data $resent?

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    21/98

    Data 0y-eso are da"a "pes s"ored i"hin a recordI

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    22/98

    22

    )ied len#"h da"a "pes 8i" char in" decimal da"e da"e"ime

    Joa" e"c.Haria8le len#"h da"a "pes

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    23/98

    2*

    SL(Bs varchar

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    24/98

    23

    In2row 3n4varchar3+4Storage

    C$3&$ &3%$ >archar&est(

    3 varchar())

    I2S$& I2& >archar&est >3%?$S@ @

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    25/98

    2,

    D;M(

    1den"iCed usin# "he si#n 8i"

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    26/98

    2+

    Harchar nvarchar var8inar

    D;M(

    !/2row SL!B Storage

    http://var/www/apps/conversion/tmp/scratch_5/Demos/Off-row%20varchar(x)%20storage.sqlhttp://var/www/apps/conversion/tmp/scratch_5/Demos/Off-row%20varchar(x)%20storage.sql

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    27/98

    2?

    %olumn da"a moved "o ne pa#e

    poin"er le'" 8ehind

    !/2row SL!B Storage

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    28/98

    20

    !/2row SL!B Storage

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    29/98

    27

    !/2row SL!B Storage

    = % Inline oot/ Slot < Colu#n G 55set

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    30/98

    *-

    S"ored on shared

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    31/98

    *6

    Allas s"ored inEro i' N 23 8"es

    23 8"e OBL(B 1nline Roo" poin"er

    Da"a s"ored in BL(B)RA:M;9T on

     Te"Mi pa#e

     Times"amp QQ Blo8 1D Per'ormance predic"ion is "ou#h

    !/2row SL!B Storage

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    32/98

    *2

    varchar

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    33/98

    **

    &sed hen da"a C"s in record

    9o" an ocial L(B s"ruc"ure

    8BL!B Inline Data8

    Slot < Colu#n B 55set

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    34/98

    *3

    %an re'erence up "o , pa#es – da"a roo"s "rees

    e"c.

    62 8"e header

    Arra o' 62 8"e re'erences

    (nl used 8 SL(Bs >

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    35/98

    *,

    4rapped in a sin#leEcolumn me"a

    record

    L!B Strctre *ecords

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    36/98

    *+

     Tpe *

    4here da"a is ac"uall s"ored

    Sie alas +3 8"es

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    37/98

    *?

    o much da"a can e s"ore in a

    DATA recordI 0-7+ – Pa#e 8od sie

    0-0-

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    38/98

    *0

     Tpe 2

    %urLinks Q num8er o' re'erences

    MaLinks Q I

    Level Q "ree level

    Sie Q compu"ed

    IN0%*NAL

    lo6 row at1 *age (B1FF) Slot < %ength1 G &7pe1 G (I2&$23%)

    lo6 Id1 BGB

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    39/98

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    40/98

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    41/98

    36

     1n "heor

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    42/98

    32

    'onnecting the Dots

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    43/98

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    44/98

    33

    0wo Levels Is All It 0akes

    0-3------- 8"es / ?30 :B

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    45/98

    3,

    sp"a8leop"ion VMTa8leG V(p"ionG

    V(9/())G

    ;ven more permu"a"ions

    W"e" in ro 23E?--- de'aul" 2,+

    Large ale 0y-es !t o1*ow

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    46/98

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    47/98

    3?

     Xou "hou#h"

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    48/98

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    49/98

    37

     Tpe Q ,

    Min sie Q 03

    Par" o' L(B "ree

    LA*6%5*!!059&K!N

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    50/98

    ,-

    'onnecting the Dots

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    51/98

    ,6

    'onnecting the Dots

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    52/98

    ,2

    Data archar374

    archar3"A74

    0e+t

    N&LL - - -

    :2;< -E+3 -E+3 6-- ::: +,E0--- +,E0--- $ k. 9/A 23 U K 6-- U K

    L!B Storage !verview

    ;"reme impac" on small da"a

     The more da"a "he less o' a diY 

    Per'ormance diYerences h""p//sl8lo#.com/8lo#s/paulhi"e/archive/2-66/-2/2*/AdvancedETS5LETunin#E4hE1n"ernals

    EZnoled#eEMa""ers.asp

    http://sqlblog.com/blogs/paul_white/archive/2011/02/23/Advanced-TSQL-Tuning-Why-Internals-Knowledge-Matters.aspxhttp://sqlblog.com/blogs/paul_white/archive/2011/02/23/Advanced-TSQL-Tuning-Why-Internals-Knowledge-Matters.aspxhttp://sqlblog.com/blogs/paul_white/archive/2011/02/23/Advanced-TSQL-Tuning-Why-Internals-Knowledge-Matters.aspxhttp://sqlblog.com/blogs/paul_white/archive/2011/02/23/Advanced-TSQL-Tuning-Why-Internals-Knowledge-Matters.aspx

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    53/98

    ,*

    0y-e Name

    - SMALLR((T

    6 I

    2 19T;R9AL

    * DATA

    3 I

    , LAR:;R((TX&Z(9

    + I

    ? I0 I

    7U I

    "ind the 6a-

    Bending the Will o1 DB''

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    54/98

    ,3

    Bending the Will o1 DB''$age@ Again@

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    55/98

    ,,

    Archeology :

    0y-e Name

    - SMALLR((T

    LA*6%5*!!0

    2 19T;R9AL

    * DATA

    < LA*6%5*!!05S)IL!)

    , LAR:;R((TX&Z(9

    ; S&$%*5LA*6%5*!!0

    > N&LL

    C INALID

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    56/98

    ,+

    N 0--- Q

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    57/98

    Indices ( )ea-so pa#es are or#anied

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    58/98

    ,0

    DeCnes ho da"a is $phsicall$ s"ored

    %lus"ered inde

    :uaran"ees phsical order o' da"a Ro iden"iCed 8 clus"ered ke

    eap

    Da"a s"ored hereever S5L Server an"s "o Ro iden"iCed 8 R1D

    'lstered Inde+ vs )ea-

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    59/98

    ,7

    B2tree Scanning

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    60/98

    +-

    Relies on 1AM pa#es

    Lea' pa#es no" linked

    ;cep"...

    )ea-s

    $ ( % t t

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    61/98

    $age ( %+tent

    Allocation;"en"s pa#es > o8!ec"s

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    62/98

    +2

    All pa#es alloca"ed as par" o' an

    e"en"

    Mied e"en"s

    &ni'orm e"en"s

    )irs" 0 Q mied res" uni'orm

    %+tents

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    63/98

    +*

    6lo8al Alloca"ion "ap

    6 Q )ree

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    64/98

    +3

    Shared 6lo8al Alloca"ion "ap

    6 Q Mied >

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    65/98

    +,

    Inde Alloca"ion "ap

    6 Q &ni'orml alloca"ed "o 1AM chain /

    alloca"ion uni"

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    66/98

    ++

    IA" $age )eaderStorage

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    67/98

    +?

    %+tent Allocation Stats

    6A" S6A" AnyIA"

    Stats

    0 0 0 Mied all pa#esalloca"ed

    0 1 0 Mied

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    68/98

    +0

    $a#e #ree Space

    Bytemap

    6 / 0-00 ever 0-00 pa#es

    P)S in"erval

    (nl "racks 'ullness here necessar

    $#S $ages

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    69/98

    ll i i

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    70/98

    ?-

    Allocation &nits

    0h B $

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    71/98

    ?6

    Pa#e 7 in primar da"a Cle

    DB%% PA:; QQ DB%% DB19)(

    Lo"s o' in"eres"in# in'o Phsical version

    Lo# re8uild coun"

    Las" (Z %;%ZDB Las" L(: 8ackup

    9ame U 1D

    )irs"Ss1ndees

    0he Boot $age

    System iews ( Base

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    72/98

    System iews ( Base

    0a.les The source o' our parsin# me"ada"a

    Needed "etadata 1or

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    73/98

    ?*

    Schema ss."a8les U ss.columns / ss.indees U

    ss.indecolumns

    1ndees Roo" pa#e

    eaps 1AM chain roo"

    D;M(

    Needed "etadata 1or$arsing

    Allocation "etadata

    http://var/www/apps/conversion/tmp/scratch_5/Demos/Needed%20metadata%20for%20parsing.sqlhttp://var/www/apps/conversion/tmp/scratch_5/Demos/Needed%20metadata%20for%20parsing.sql

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    74/98

    ?3

    Allocation "etadata!verview

    D" A & l

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    75/98

    ?,

     [us" vies no phsical s"ora#e

    %hicken or "he e##

    o a8ou" e "ake a look a" "hose

    viesI

    D;M(

    D"s Are &seless

    B 0 .l

    http://var/www/apps/conversion/tmp/scratch_5/Demos/DMVs%20are%20useless.sqlhttp://var/www/apps/conversion/tmp/scratch_5/Demos/DMVs%20are%20useless.sql

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    76/98

    ?+

     The 8asis 'or DMH da"a

    %an onl 8e ueried "hrou#h "he DA%

    ere 8e dra#ons

    %on'usin# column names

    &"ilies in"ernal 'unc"ions

    Base 0a.les

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    77/98

    # ll th * ..it

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    78/98

    ?0

    Boo" pa#e poin"s "o ssallocuni"s

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    79/98

    ?7

    !$%N*!WS%030ABL%*S'$*!$4

    SELECT  C3S$ c.#a,inrowlen  *EN < T*EN p.length

    ELSE c.#a,inrowlen  END AS #a,LinrowLlength+  p.,t7pe AS s7ste#Lt7peLid+

    p.length AS #a,Llength+p.prec AS +RECISIN+p.scale AS scale+

    R&  s7s.s7srscols c MN s7s.s7ste#LinternalsLpartitionLcolu#ns

    ?&$ 3**%O  *$2-S$&(TABLE SC**+ c.ti) p

    !$%N*!WS%030ABL%

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    80/98

    0-

    !$%N*!WS%030ABL%*S'$*!$4

    !$%N*!WS%030ABL%

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    81/98

    06

    !$%N*!WS%030ABL%*S'$*!$4

    CREATE TABLE &I&est(  3 -inar.(F

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    82/98

    02

    ! ! S 3*S'$*!$4

    SELECT  t.nae+  r.ti+  p.scale+  p.3recision+  p.#a,Llength+  p.s7ste#Lt7peLid+  p.#a,LinrowLlengthR&  s7s.s7ste#LinternalsLpartitionLcolu#ns pINNER RI2  s7s.s7srscols r N  r.rscolid = p.partitionLcolu#nLid 32D

      r.rsid = p.partitionLidINNER RI2  s7s.t7pes t N  t.s7ste#Lt7peLid = p.s7ste#Lt7peLid 32D  t.userLt7peLid = p.s7ste#Lt7peLid*ERE

      partitionLid = G

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    83/98

    0*

    3*S'$*!$4

    !$%N*!WS%030ABL%

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    84/98

    03

    BGH =

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    85/98

    0,

    BGG =

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    86/98

    0+

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    87/98

    0?

    g y-$arser

      &est/  3-/ic void Deci#al()  {  var parser = ne4 S7srscol&I*arser(

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    88/98

    Data *ecovery4hen everything else 'ails

    $lease DonEt *ely on

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    89/98

    07

     Xou should always have 8ackups

    availa8le

    Make sure "o test our 8ackups

    Run reglar consistency checks

     This is a last resort measure

    y0his

    What Kind o1 $ro.lems to

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    90/98

    7-

     Torn pa#es

    %orrup" pa#es

    Bad me"ada"a

    Acciden"al dele"es > "runca"ions

    o does (rcaMD) diYerI

    %+-ect

    0orn $ages

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    91/98

    76

    (ne pa#e Q 6+ disk sec"ors

    )irs" and las" sec"or mos" impor"an"

    9o header 1den"i' o8!ec" 'rom 1AM linked lis"

    9o slo" arra Slo" coun" in header

    1den"i' record 'orma"s in 8od

    0orn $ages

    'orr-t $ages

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    92/98

    72

    %hecksum doesnG" ma"ch con"en"

    %ould 8e minor issue pro8a8l ma!or

     Trea" like "orn pa#e

    'orr-t $ages

    Bad "etadata

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    93/98

    7*

    S5L Server 8u#s

    %orrup"/"orn pa#es

    Scan pa#es and iden"i' o8!ec" in header

    Scan pa#es and look 'or 1AM chain

    Deduce schema App

    Docs

    Record 'orma"

    Bad "etadata

    Accidental Deletes (

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    94/98

    73

    Acciden"al dele"e Records ma 8e #hos"ed

    Records removed 'rom slo" arra

    ST(P

    Acciden"al "runca"ion

    Pa#es dealloca"ed phsicall in"ac" Scan pa#es linked lis"

    0rncations

    Watch !t #or Instant

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    95/98

    7,

    :ar8a#e ma 8e mis"aken 'or da"a

    4as pa#e alloca"edI

    Look 'or clues in salva#a8le alloca"ions"ruc"ures

    InitialiFation

    !rca"D# #tre $lans

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    96/98

    7+

    %orrup"Md' class

    Heri'in# "orn8i"s / checksum

    &"ili" me"hods Scan 'or pa#es 8elon#in# "o o8!ec"

    Scan 'or 1AM pa#es

    Bes"EeYor" parsin# o' pa#es

    !rca"D# #tre $lans

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    97/98

  • 8/17/2019 Knowing the Internals - Who Needs SQL Server Anyway - Mark Rasmussen

    98/98

    0hank yo

    Blo# improve.dkTi""er @improvedk