Overview
Η γνώση των internals στο SQL Server όπως πολλές φορές έχω αναφέρει είναι σημαντική γιατί έτσι μπορείς να σχεδιάσεις καλύτερα το database schema, να γράψεις καλύτερα queries ή διαδικασίες και φυσικά να μπορείς να κάνεις καλύτερο troubleshooting.
Σε αυτό το άρθρο θα κατέβουμε για τα καλά το πάτο του βαρελιού καθώς θα κατανοήσουμε το πως ο SQL Server αντιμετωπίζει αυτά που του ζητάμε.
Είμαι σίγουρος ότι αρκετοί θα αναρωτηθούν γιατί γράφω αυτό το άρθρο και ποια είναι η αξία που θα πάρουν από αυτό. Η απάντηση είναι ότι αν το δει κάποιος μεμονωμένα δεν θα βρει μεγάλη αξία αλλά το μυστικό κρύβεται στην σύνδεση με άλλα πράγματα που θέλω να αναπτύξω σε άλλα άρθρα μου στην συνέχεια αλλά δεν θέλω να τα βάλω όλα αυτά μαζί καθώς θα ήταν δύσκολα στην ανάγνωση και στην κατανόηση.
Με αυτά σαν επεξήγηση ας προχωρήσουμε στο θέμα το του άρθρου αυτού.
Είναι γνωστό ότι τα δεδομένα που βάζουμε στα tables αλλά και στους indexes αποθηκεύονται σε 8KB pages και το ερώτημα είναι να βρούμε αυτές που περιέχουν αυτά.
Οι λόγοι που μπορεί να σε οδηγήσουν να αναζητήσεις αυτή την πληροφορία είναι αρχικά μαθησιακοί (για όσους θέλουν να μάθουν σε βάθος την αρχιτεκτονική του SQL Server) αλλά και πρακτικοί καθώς σε δύσκολες περιπτώσεις τόσο corruption αλλά και επίλυσης θεμάτων απόδοσης θέλεις να έχει μια εικόνα που περιέχει λεπτομέρεια τέτοια που να σε βοηθήσουν να λύσεις αυτά.
The undocumented DMF sys.dm_db_databases_page_allocation
Για να μπορέσω να πάρω αυτή την εικόνα υπάρχει ένα undocumented DMF το sys.dm_db_databases_page_allocation.
Αυτό το DMF δέχεται πέντε παραμέτρους:
- @DatabaseId: Είναι υποχρεωτική παράμετρος και δίνουμε το database ID της database στην οποία θέλουμε να γίνει η εκτέλεση. Μπορούμε να πάρουμε το id αυτό με την χρήση της DB_ID() function
- @TableId: Δεν είναι υποχρεωτική παράμετρος και στην περίπτωση που περάσουμε το NULL σαν τιμή θα επιστρέψει όλους τους πίνακες που έχουμε στην database και αυτό πραγματικά είναι αργό αλλά και δεν έχει να μας προσφέρει κάτι σαν πληροφορία καθώς όπως είπα πάμε στοχευμένα. Το Table Id για το πίνακα που μας ενδιαφέρει μπορούμε να το πάρουμε με την χρήση της OBJECT_ID() function.
- @IndexId: Δεν είναι υποχρεωτική παράμετρος και στην περίπτωση που περάσουμε το NULL σαν τιμή θα επιστρέψει πληροφορία για όλους τους indexes. Αν θέλουμε για συγκεκριμένο index μπορούμε να πάρουμε το Index Id από το sys.indexes catalog view.
- @PartitionId: Δεν είναι υποχρεωτική παράμετρος και στην περίπτωση του NULL σαν input value επιστρέφονται όλα τα partitions.
- @Mode: Είναι υποχρεωτική παράμετρος και παίρνει δύο τιμές ‘LIMITED’ / ‘DETAILED’. Η πρώτη επιστρέφει λιγότερες πληροφορίες η δεύτερη περισσότερες αλλά χρειάζονται περισσότεροι πόροι για την εκτέλεση της.
ATTENTION
Σε αυτό το σημείο θα πρέπει να επισημάνω ότι η χρήση της συγκεκριμένης DMF έχει αρκετά σημαντικό κόστος σε πόρους αλλά και σε locks και IO και μεγάλες databases (>1TB) παίρνει πολυυυυυυ χρόνο.
Learning by example
Αρχικά ας δημιουργήσουμε μια database και σε αυτή ένα table X, αρχικά σαν heap.
Script-1
create database bindb;
go
use bindb;
go
create table X (col1 int, col2 datetime2(7), col3 char(100));
go
Αν εκτελέσουμε την DMF συνδυαστικά με το sys.indexes catalog view όπως στο παρακάτω query δεν θα έχουμε κάποιο αποτέλεσμα καθώς δεν έχουμε βάλει κάποιο row και είναι γνωστό ότι η δημιουργία ενός table δεν καταλαμβάνει χώρο εκτός από τα απαραίτητα entries που γίνονται στα metadata system objects. Στο σημείο αυτό θα ήθελα να σας προτρέψω να εκτελέσετε και μεμονωμένα το DMF για να δείτε το τι επιστρέφει και το οποίο από τα ονόματα των στηλών είναι εύκολο κανείς να καταλάβει αυτά.
Query-1
select
db_name(p.database_id) as [database_name]
, object_name(p.object_id) as table_name
, i.[name] as index_name
, is_allocated
, allocated_page_file_id as [file_id]
, allocated_page_page_id as [page_id]
, page_type_desc
, page_level
, previous_page_page_id as previous_page_id
, next_page_page_id as next_page_id
from
sys.dm_db_database_page_allocations (
db_id()
, object_id('x')
, null
, null
, 'detailed'
) as p
left outer join sys.indexes i on i.object_id = p.object_id and i.index_id = p.index_id
order by table_name , index_name, page_level desc, is_allocated desc, previous_page_page_id
Αν τώρα στο table προσθέσω ένα row και το εκτελέσω ξανά θα δω αποτέλεσμα το οποίο είναι το παρακάτω
Script-2
insert into X values (1,SYSDATETIME(),'a')
Execution Result of Query-1
database_name |
table_name |
index_name |
is_allocated |
file_id |
page_id |
page_type_desc |
page_level |
previous_page_id |
next_page_id |
bindb |
X |
|
1 |
1 |
126 |
IAM_PAGE |
0 |
0 |
0 |
bindb |
X |
|
1 |
1 |
352 |
DATA_PAGE |
0 |
0 |
0 |
bindb |
X |
|
0 |
1 |
353 |
|
0 |
0 |
0 |
bindb |
X |
|
0 |
1 |
354 |
|
0 |
0 |
0 |
bindb |
X |
|
0 |
1 |
355 |
|
0 |
0 |
0 |
bindb |
X |
|
0 |
1 |
356 |
|
0 |
0 |
0 |
bindb |
X |
|
0 |
1 |
357 |
|
0 |
0 |
0 |
bindb |
X |
|
0 |
1 |
358 |
|
0 |
0 |
0 |
bindb |
X |
|
0 |
1 |
359 |
|
0 |
0 |
0 |
Αν εξετάσουμε το αποτέλεσμα βλέπουμε ότι η σελίδα 126 έχει δεσμευτεί σαν Index Allocation Map (IAM) και η πρώτη σελίδα που περιέχει δεδομένα είναι η 352.
Επίσης επειδή δεν έχω κάποιο clustered index βλέπω στο index_name column την τιμή null.
Create Clustered Index
Αν τώρα δημιουργήσω ένα clustered index στο col1 column θα δούμε ότι πλέον δεν έχουμε heap και πάλι μπορούμε να εντοπίσουμε τις σελίδες που περιέχουν τα δεδομένα. Αν αναρωτιέστε γιατί δεν είναι οι ίδιες η απάντηση είναι απλή, δημιουργήσαμε ένα clustered index και όπως είναι γνωστό γίνεται αναδιάταξη των δεδομένων.
Script-3
create clustered index cidx on x(col1)
Execution Result of Query-1
database_name |
table_name |
index_name |
is_allocated |
file_id |
page_id |
page_type_desc |
page_level |
previous_page_id |
next_page_id |
bindb |
X |
cidx |
1 |
1 |
127 |
IAM_PAGE |
0 |
0 |
0 |
bindb |
X |
cidx |
1 |
1 |
368 |
DATA_PAGE |
0 |
0 |
0 |
bindb |
X |
cidx |
0 |
1 |
369 |
|
0 |
0 |
0 |
bindb |
X |
cidx |
0 |
1 |
370 |
|
0 |
0 |
0 |
bindb |
X |
cidx |
0 |
1 |
371 |
|
0 |
0 |
0 |
bindb |
X |
cidx |
0 |
1 |
372 |
|
0 |
0 |
0 |
bindb |
X |
cidx |
0 |
1 |
373 |
|
0 |
0 |
0 |
bindb |
X |
cidx |
0 |
1 |
374 |
|
0 |
0 |
0 |
bindb |
X |
cidx |
0 |
1 |
375 |
|
0 |
0 |
0 |
Create Non-Clustered Index
Αν τώρα φτιάξουμε και ένα nonclustered index στο col2 column έχουμε τα εξής αποτελέσματα στα οποία παρατηρούμε ότι η 126 είναι η IAM του index και έχει μόνο μία σελίδα την 352 που είναι στο leaf level αυτού.
Script-4
create index idx on x(col2)
Execution Result of Query-1
database_name |
table_name |
index_name |
is_allocated |
file_id |
page_id |
page_type_desc |
page_level |
previous_page_id |
next_page_id |
bindb |
X |
cidx |
1 |
1 |
127 |
IAM_PAGE |
0 |
0 |
0 |
bindb |
X |
cidx |
1 |
1 |
368 |
DATA_PAGE |
0 |
0 |
0 |
bindb |
X |
cidx |
0 |
1 |
369 |
|
0 |
0 |
0 |
bindb |
X |
cidx |
0 |
1 |
370 |
|
0 |
0 |
0 |
bindb |
X |
cidx |
0 |
1 |
371 |
|
0 |
0 |
0 |
bindb |
X |
cidx |
0 |
1 |
372 |
|
0 |
0 |
0 |
bindb |
X |
cidx |
0 |
1 |
373 |
|
0 |
0 |
0 |
bindb |
X |
cidx |
0 |
1 |
374 |
|
0 |
0 |
0 |
bindb |
X |
cidx |
0 |
1 |
375 |
|
0 |
0 |
0 |
bindb |
X |
idx |
1 |
1 |
126 |
IAM_PAGE |
0 |
0 |
0 |
bindb |
X |
idx |
1 |
1 |
352 |
INDEX_PAGE |
0 |
0 |
0 |
bindb |
X |
idx |
0 |
1 |
353 |
|
0 |
0 |
0 |
bindb |
X |
idx |
0 |
1 |
354 |
|
0 |
0 |
0 |
bindb |
X |
idx |
0 |
1 |
355 |
|
0 |
0 |
0 |
bindb |
X |
idx |
0 |
1 |
356 |
|
0 |
0 |
0 |
bindb |
X |
idx |
0 |
1 |
357 |
|
0 |
0 |
0 |
bindb |
X |
idx |
0 |
1 |
358 |
|
0 |
0 |
0 |
bindb |
X |
idx |
0 |
1 |
359 |
|
0 |
0 |
0 |
Adding more rows
Αν βάλουμε 20000 rows στο table αυτό θα δούμε το εξής το παρακάτω αποτέλεσμα από την εκτέλεση του query.
Από το αποτέλεσμα αυτό μπορούμε να καταλάβουμε πολλά που αφορούν την αρχιτεκτονική του SQL Server και ιδιαίτερα για την δομή των indexes.
Για παράδειγμα αν πάρουμε το clustered index (cidx) θα δούμε ότι η σελίδα 127 είναι η IAM όπου στο page_type_desc επιστρέφει DATA_PAGE είναι τα actual data αλλά και το leaf level του clustered index και αυτό το καταλαβαίνουμε από το page_level που είναι μηδέν (και θα δείτε ότι έχουμε πολλά) και τα previous/next page id δείχνουν στην σειρά των pages/data. Επίσης το page_level δείχνει το επόμενο index level που μπορεί αν είναι κάποιο intermediate ή το root index level. Το root index level μπορούμε να το καταλάβουμε από το μεγαλύτερη τιμή που θα δούμε στο page_level αλλά μπορούμε εύκολα να το εντοπίσουμε όταν το page_type_desc είναι INDEX_PAGE και τα previous/next page id είναι NULL
Execution Result of Query-1
database_name |
table_name |
index_name |
is_allocated |
file_id |
page_id |
page_type_desc |
page_level |
previous_page_id |
next_page_id |
bindb |
X |
cidx |
1 |
1 |
127 |
IAM_PAGE |
0 |
0 |
0 |
bindb |
X |
cidx |
1 |
1 |
368 |
DATA_PAGE |
0 |
0 |
370 |
bindb |
X |
cidx |
1 |
1 |
369 |
INDEX_PAGE |
1 |
0 |
0 |
bindb |
X |
cidx |
1 |
1 |
370 |
DATA_PAGE |
0 |
368 |
371 |
bindb |
X |
cidx |
1 |
1 |
371 |
DATA_PAGE |
0 |
370 |
372 |
bindb |
X |
cidx |
1 |
1 |
372 |
DATA_PAGE |
0 |
371 |
373 |
bindb |
X |
cidx |
1 |
1 |
373 |
DATA_PAGE |
0 |
372 |
374 |
bindb |
X |
cidx |
1 |
1 |
374 |
DATA_PAGE |
0 |
373 |
375 |
bindb |
X |
cidx |
1 |
1 |
375 |
DATA_PAGE |
0 |
374 |
384 |
bindb |
X |
cidx |
1 |
1 |
384 |
DATA_PAGE |
0 |
375 |
385 |
bindb |
X |
cidx |
1 |
1 |
385 |
DATA_PAGE |
0 |
384 |
386 |
bindb |
X |
cidx |
1 |
1 |
386 |
DATA_PAGE |
0 |
385 |
387 |
bindb |
X |
cidx |
1 |
1 |
387 |
DATA_PAGE |
0 |
386 |
388 |
bindb |
X |
cidx |
1 |
1 |
388 |
DATA_PAGE |
0 |
387 |
389 |
bindb |
X |
cidx |
1 |
1 |
389 |
DATA_PAGE |
0 |
388 |
390 |
bindb |
X |
cidx |
1 |
1 |
390 |
DATA_PAGE |
0 |
389 |
391 |
bindb |
X |
cidx |
1 |
1 |
391 |
DATA_PAGE |
0 |
390 |
416 |
bindb |
X |
cidx |
1 |
1 |
416 |
DATA_PAGE |
0 |
391 |
417 |
bindb |
X |
cidx |
1 |
1 |
417 |
DATA_PAGE |
0 |
416 |
418 |
bindb |
X |
cidx |
1 |
1 |
418 |
DATA_PAGE |
0 |
417 |
419 |
bindb |
X |
cidx |
1 |
1 |
419 |
DATA_PAGE |
0 |
418 |
420 |
bindb |
X |
cidx |
1 |
1 |
420 |
DATA_PAGE |
0 |
419 |
421 |
bindb |
X |
cidx |
1 |
1 |
421 |
DATA_PAGE |
0 |
420 |
422 |
bindb |
X |
cidx |
1 |
1 |
422 |
DATA_PAGE |
0 |
421 |
423 |
bindb |
X |
cidx |
1 |
1 |
423 |
DATA_PAGE |
0 |
422 |
432 |
bindb |
X |
cidx |
1 |
1 |
432 |
DATA_PAGE |
0 |
423 |
433 |
bindb |
X |
cidx |
1 |
1 |
433 |
DATA_PAGE |
0 |
432 |
434 |
bindb |
X |
cidx |
1 |
1 |
434 |
DATA_PAGE |
0 |
433 |
435 |
bindb |
X |
cidx |
1 |
1 |
435 |
DATA_PAGE |
0 |
434 |
436 |
bindb |
X |
cidx |
1 |
1 |
436 |
DATA_PAGE |
0 |
435 |
437 |
bindb |
X |
cidx |
1 |
1 |
437 |
DATA_PAGE |
0 |
436 |
438 |
bindb |
X |
cidx |
1 |
1 |
438 |
DATA_PAGE |
0 |
437 |
439 |
bindb |
X |
cidx |
1 |
1 |
439 |
DATA_PAGE |
0 |
438 |
440 |
bindb |
X |
cidx |
1 |
1 |
440 |
DATA_PAGE |
0 |
439 |
441 |
bindb |
X |
cidx |
1 |
1 |
441 |
DATA_PAGE |
0 |
440 |
442 |
bindb |
X |
cidx |
1 |
1 |
442 |
DATA_PAGE |
0 |
441 |
443 |
bindb |
X |
cidx |
1 |
1 |
443 |
DATA_PAGE |
0 |
442 |
444 |
bindb |
X |
cidx |
1 |
1 |
444 |
DATA_PAGE |
0 |
443 |
445 |
bindb |
X |
cidx |
1 |
1 |
445 |
DATA_PAGE |
0 |
444 |
446 |
bindb |
X |
cidx |
1 |
1 |
446 |
DATA_PAGE |
0 |
445 |
447 |
bindb |
X |
cidx |
1 |
1 |
447 |
DATA_PAGE |
0 |
446 |
448 |
bindb |
X |
cidx |
1 |
1 |
448 |
DATA_PAGE |
0 |
447 |
449 |
bindb |
X |
cidx |
1 |
1 |
449 |
DATA_PAGE |
0 |
448 |
450 |
bindb |
X |
cidx |
1 |
1 |
450 |
DATA_PAGE |
0 |
449 |
451 |
bindb |
X |
cidx |
1 |
1 |
451 |
DATA_PAGE |
0 |
450 |
452 |
bindb |
X |
cidx |
1 |
1 |
452 |
DATA_PAGE |
0 |
451 |
453 |
bindb |
X |
cidx |
1 |
1 |
453 |
DATA_PAGE |
0 |
452 |
454 |
bindb |
X |
cidx |
1 |
1 |
454 |
DATA_PAGE |
0 |
453 |
455 |
bindb |
X |
cidx |
1 |
1 |
455 |
DATA_PAGE |
0 |
454 |
456 |
bindb |
X |
cidx |
1 |
1 |
456 |
DATA_PAGE |
0 |
455 |
457 |
bindb |
X |
cidx |
1 |
1 |
457 |
DATA_PAGE |
0 |
456 |
458 |
bindb |
X |
cidx |
1 |
1 |
458 |
DATA_PAGE |
0 |
457 |
459 |
bindb |
X |
cidx |
1 |
1 |
459 |
DATA_PAGE |
0 |
458 |
460 |
bindb |
X |
cidx |
1 |
1 |
460 |
DATA_PAGE |
0 |
459 |
461 |
bindb |
X |
cidx |
1 |
1 |
461 |
DATA_PAGE |
0 |
460 |
462 |
bindb |
X |
cidx |
1 |
1 |
462 |
DATA_PAGE |
0 |
461 |
463 |
bindb |
X |
cidx |
1 |
1 |
463 |
DATA_PAGE |
0 |
462 |
472 |
bindb |
X |
cidx |
1 |
1 |
472 |
DATA_PAGE |
0 |
463 |
473 |
bindb |
X |
cidx |
1 |
1 |
473 |
DATA_PAGE |
0 |
472 |
474 |
bindb |
X |
cidx |
1 |
1 |
474 |
DATA_PAGE |
0 |
473 |
475 |
bindb |
X |
cidx |
1 |
1 |
475 |
DATA_PAGE |
0 |
474 |
476 |
bindb |
X |
cidx |
1 |
1 |
476 |
DATA_PAGE |
0 |
475 |
477 |
bindb |
X |
cidx |
1 |
1 |
477 |
DATA_PAGE |
0 |
476 |
478 |
bindb |
X |
cidx |
1 |
1 |
478 |
DATA_PAGE |
0 |
477 |
479 |
bindb |
X |
cidx |
1 |
1 |
479 |
DATA_PAGE |
0 |
478 |
480 |
bindb |
X |
cidx |
1 |
1 |
480 |
DATA_PAGE |
0 |
479 |
481 |
bindb |
X |
cidx |
1 |
1 |
481 |
DATA_PAGE |
0 |
480 |
482 |
bindb |
X |
cidx |
1 |
1 |
482 |
DATA_PAGE |
0 |
481 |
483 |
bindb |
X |
cidx |
1 |
1 |
483 |
DATA_PAGE |
0 |
482 |
484 |
bindb |
X |
cidx |
1 |
1 |
484 |
DATA_PAGE |
0 |
483 |
485 |
bindb |
X |
cidx |
1 |
1 |
485 |
DATA_PAGE |
0 |
484 |
486 |
bindb |
X |
cidx |
1 |
1 |
486 |
DATA_PAGE |
0 |
485 |
487 |
bindb |
X |
cidx |
1 |
1 |
487 |
DATA_PAGE |
0 |
486 |
488 |
bindb |
X |
cidx |
1 |
1 |
488 |
DATA_PAGE |
0 |
487 |
489 |
bindb |
X |
cidx |
1 |
1 |
489 |
DATA_PAGE |
0 |
488 |
490 |
bindb |
X |
cidx |
1 |
1 |
490 |
DATA_PAGE |
0 |
489 |
491 |
bindb |
X |
cidx |
1 |
1 |
491 |
DATA_PAGE |
0 |
490 |
492 |
bindb |
X |
cidx |
1 |
1 |
492 |
DATA_PAGE |
0 |
491 |
493 |
bindb |
X |
cidx |
1 |
1 |
493 |
DATA_PAGE |
0 |
492 |
494 |
bindb |
X |
cidx |
1 |
1 |
494 |
DATA_PAGE |
0 |
493 |
495 |
bindb |
X |
cidx |
1 |
1 |
495 |
DATA_PAGE |
0 |
494 |
496 |
bindb |
X |
cidx |
1 |
1 |
496 |
DATA_PAGE |
0 |
495 |
497 |
bindb |
X |
cidx |
1 |
1 |
497 |
DATA_PAGE |
0 |
496 |
498 |
bindb |
X |
cidx |
1 |
1 |
498 |
DATA_PAGE |
0 |
497 |
499 |
bindb |
X |
cidx |
1 |
1 |
499 |
DATA_PAGE |
0 |
498 |
500 |
bindb |
X |
cidx |
1 |
1 |
500 |
DATA_PAGE |
0 |
499 |
501 |
bindb |
X |
cidx |
1 |
1 |
501 |
DATA_PAGE |
0 |
500 |
502 |
bindb |
X |
cidx |
1 |
1 |
502 |
DATA_PAGE |
0 |
501 |
503 |
bindb |
X |
cidx |
1 |
1 |
503 |
DATA_PAGE |
0 |
502 |
504 |
bindb |
X |
cidx |
1 |
1 |
504 |
DATA_PAGE |
0 |
503 |
505 |
bindb |
X |
cidx |
1 |
1 |
505 |
DATA_PAGE |
0 |
504 |
506 |
bindb |
X |
cidx |
1 |
1 |
506 |
DATA_PAGE |
0 |
505 |
507 |
bindb |
X |
cidx |
1 |
1 |
507 |
DATA_PAGE |
0 |
506 |
508 |
bindb |
X |
cidx |
1 |
1 |
508 |
DATA_PAGE |
0 |
507 |
509 |
bindb |
X |
cidx |
1 |
1 |
509 |
DATA_PAGE |
0 |
508 |
510 |
bindb |
X |
cidx |
1 |
1 |
510 |
DATA_PAGE |
0 |
509 |
511 |
bindb |
X |
cidx |
1 |
1 |
511 |
DATA_PAGE |
0 |
510 |
512 |
bindb |
X |
cidx |
1 |
1 |
512 |
DATA_PAGE |
0 |
511 |
513 |
bindb |
X |
cidx |
1 |
1 |
513 |
DATA_PAGE |
0 |
512 |
514 |
bindb |
X |
cidx |
1 |
1 |
514 |
DATA_PAGE |
0 |
513 |
515 |
bindb |
X |
cidx |
1 |
1 |
515 |
DATA_PAGE |
0 |
514 |
516 |
bindb |
X |
cidx |
1 |
1 |
516 |
DATA_PAGE |
0 |
515 |
517 |
bindb |
X |
cidx |
1 |
1 |
517 |
DATA_PAGE |
0 |
516 |
518 |
bindb |
X |
cidx |
1 |
1 |
518 |
DATA_PAGE |
0 |
517 |
519 |
bindb |
X |
cidx |
1 |
1 |
519 |
DATA_PAGE |
0 |
518 |
528 |
bindb |
X |
cidx |
1 |
1 |
528 |
DATA_PAGE |
0 |
519 |
529 |
bindb |
X |
cidx |
1 |
1 |
529 |
DATA_PAGE |
0 |
528 |
530 |
bindb |
X |
cidx |
1 |
1 |
530 |
DATA_PAGE |
0 |
529 |
531 |
bindb |
X |
cidx |
1 |
1 |
531 |
DATA_PAGE |
0 |
530 |
532 |
bindb |
X |
cidx |
1 |
1 |
532 |
DATA_PAGE |
0 |
531 |
533 |
bindb |
X |
cidx |
1 |
1 |
533 |
DATA_PAGE |
0 |
532 |
534 |
bindb |
X |
cidx |
1 |
1 |
534 |
DATA_PAGE |
0 |
533 |
535 |
bindb |
X |
cidx |
1 |
1 |
535 |
DATA_PAGE |
0 |
534 |
536 |
bindb |
X |
cidx |
1 |
1 |
536 |
DATA_PAGE |
0 |
535 |
537 |
bindb |
X |
cidx |
1 |
1 |
537 |
DATA_PAGE |
0 |
536 |
538 |
bindb |
X |
cidx |
1 |
1 |
538 |
DATA_PAGE |
0 |
537 |
539 |
bindb |
X |
cidx |
1 |
1 |
539 |
DATA_PAGE |
0 |
538 |
540 |
bindb |
X |
cidx |
1 |
1 |
540 |
DATA_PAGE |
0 |
539 |
541 |
bindb |
X |
cidx |
1 |
1 |
541 |
DATA_PAGE |
0 |
540 |
542 |
bindb |
X |
cidx |
1 |
1 |
542 |
DATA_PAGE |
0 |
541 |
543 |
bindb |
X |
cidx |
1 |
1 |
543 |
DATA_PAGE |
0 |
542 |
544 |
bindb |
X |
cidx |
1 |
1 |
544 |
DATA_PAGE |
0 |
543 |
545 |
bindb |
X |
cidx |
1 |
1 |
545 |
DATA_PAGE |
0 |
544 |
546 |
bindb |
X |
cidx |
1 |
1 |
546 |
DATA_PAGE |
0 |
545 |
547 |
bindb |
X |
cidx |
1 |
1 |
547 |
DATA_PAGE |
0 |
546 |
548 |
bindb |
X |
cidx |
1 |
1 |
548 |
DATA_PAGE |
0 |
547 |
549 |
bindb |
X |
cidx |
1 |
1 |
549 |
DATA_PAGE |
0 |
548 |
550 |
bindb |
X |
cidx |
1 |
1 |
550 |
DATA_PAGE |
0 |
549 |
551 |
bindb |
X |
cidx |
1 |
1 |
551 |
DATA_PAGE |
0 |
550 |
552 |
bindb |
X |
cidx |
1 |
1 |
552 |
DATA_PAGE |
0 |
551 |
553 |
bindb |
X |
cidx |
1 |
1 |
553 |
DATA_PAGE |
0 |
552 |
554 |
bindb |
X |
cidx |
1 |
1 |
554 |
DATA_PAGE |
0 |
553 |
555 |
bindb |
X |
cidx |
1 |
1 |
555 |
DATA_PAGE |
0 |
554 |
556 |
bindb |
X |
cidx |
1 |
1 |
556 |
DATA_PAGE |
0 |
555 |
557 |
bindb |
X |
cidx |
1 |
1 |
557 |
DATA_PAGE |
0 |
556 |
558 |
bindb |
X |
cidx |
1 |
1 |
558 |
DATA_PAGE |
0 |
557 |
559 |
bindb |
X |
cidx |
1 |
1 |
559 |
DATA_PAGE |
0 |
558 |
560 |
bindb |
X |
cidx |
1 |
1 |
560 |
DATA_PAGE |
0 |
559 |
561 |
bindb |
X |
cidx |
1 |
1 |
561 |
DATA_PAGE |
0 |
560 |
562 |
bindb |
X |
cidx |
1 |
1 |
562 |
DATA_PAGE |
0 |
561 |
563 |
bindb |
X |
cidx |
1 |
1 |
563 |
DATA_PAGE |
0 |
562 |
564 |
bindb |
X |
cidx |
1 |
1 |
564 |
DATA_PAGE |
0 |
563 |
565 |
bindb |
X |
cidx |
1 |
1 |
565 |
DATA_PAGE |
0 |
564 |
566 |
bindb |
X |
cidx |
1 |
1 |
566 |
DATA_PAGE |
0 |
565 |
567 |
bindb |
X |
cidx |
1 |
1 |
567 |
DATA_PAGE |
0 |
566 |
568 |
bindb |
X |
cidx |
1 |
1 |
568 |
DATA_PAGE |
0 |
567 |
569 |
bindb |
X |
cidx |
1 |
1 |
569 |
DATA_PAGE |
0 |
568 |
570 |
bindb |
X |
cidx |
1 |
1 |
570 |
DATA_PAGE |
0 |
569 |
571 |
bindb |
X |
cidx |
1 |
1 |
571 |
DATA_PAGE |
0 |
570 |
572 |
bindb |
X |
cidx |
1 |
1 |
572 |
DATA_PAGE |
0 |
571 |
573 |
bindb |
X |
cidx |
1 |
1 |
573 |
DATA_PAGE |
0 |
572 |
574 |
bindb |
X |
cidx |
1 |
1 |
574 |
DATA_PAGE |
0 |
573 |
575 |
bindb |
X |
cidx |
1 |
1 |
575 |
DATA_PAGE |
0 |
574 |
576 |
bindb |
X |
cidx |
1 |
1 |
576 |
DATA_PAGE |
0 |
575 |
577 |
bindb |
X |
cidx |
1 |
1 |
577 |
DATA_PAGE |
0 |
576 |
578 |
bindb |
X |
cidx |
1 |
1 |
578 |
DATA_PAGE |
0 |
577 |
579 |
bindb |
X |
cidx |
1 |
1 |
579 |
DATA_PAGE |
0 |
578 |
580 |
bindb |
X |
cidx |
1 |
1 |
580 |
DATA_PAGE |
0 |
579 |
581 |
bindb |
X |
cidx |
1 |
1 |
581 |
DATA_PAGE |
0 |
580 |
582 |
bindb |
X |
cidx |
1 |
1 |
582 |
DATA_PAGE |
0 |
581 |
583 |
bindb |
X |
cidx |
1 |
1 |
583 |
DATA_PAGE |
0 |
582 |
592 |
bindb |
X |
cidx |
1 |
1 |
592 |
DATA_PAGE |
0 |
583 |
593 |
bindb |
X |
cidx |
1 |
1 |
593 |
DATA_PAGE |
0 |
592 |
594 |
bindb |
X |
cidx |
1 |
1 |
594 |
DATA_PAGE |
0 |
593 |
595 |
bindb |
X |
cidx |
1 |
1 |
595 |
DATA_PAGE |
0 |
594 |
596 |
bindb |
X |
cidx |
1 |
1 |
596 |
DATA_PAGE |
0 |
595 |
597 |
bindb |
X |
cidx |
1 |
1 |
597 |
DATA_PAGE |
0 |
596 |
598 |
bindb |
X |
cidx |
1 |
1 |
598 |
DATA_PAGE |
0 |
597 |
599 |
bindb |
X |
cidx |
1 |
1 |
599 |
DATA_PAGE |
0 |
598 |
0 |
bindb |
X |
idx |
1 |
1 |
126 |
IAM_PAGE |
0 |
0 |
0 |
bindb |
X |
idx |
1 |
1 |
352 |
INDEX_PAGE |
0 |
0 |
354 |
bindb |
X |
idx |
1 |
1 |
353 |
INDEX_PAGE |
1 |
0 |
0 |
bindb |
X |
idx |
1 |
1 |
354 |
INDEX_PAGE |
0 |
352 |
355 |
bindb |
X |
idx |
1 |
1 |
355 |
INDEX_PAGE |
0 |
354 |
356 |
bindb |
X |
idx |
1 |
1 |
356 |
INDEX_PAGE |
0 |
355 |
357 |
bindb |
X |
idx |
1 |
1 |
357 |
INDEX_PAGE |
0 |
356 |
358 |
bindb |
X |
idx |
1 |
1 |
358 |
INDEX_PAGE |
0 |
357 |
359 |
bindb |
X |
idx |
1 |
1 |
359 |
INDEX_PAGE |
0 |
358 |
464 |
bindb |
X |
idx |
1 |
1 |
464 |
INDEX_PAGE |
0 |
359 |
465 |
bindb |
X |
idx |
1 |
1 |
465 |
INDEX_PAGE |
0 |
464 |
466 |
bindb |
X |
idx |
1 |
1 |
466 |
INDEX_PAGE |
0 |
465 |
467 |
bindb |
X |
idx |
1 |
1 |
467 |
INDEX_PAGE |
0 |
466 |
468 |
bindb |
X |
idx |
1 |
1 |
468 |
INDEX_PAGE |
0 |
467 |
469 |
bindb |
X |
idx |
1 |
1 |
469 |
INDEX_PAGE |
0 |
468 |
470 |
bindb |
X |
idx |
1 |
1 |
470 |
INDEX_PAGE |
0 |
469 |
471 |
bindb |
X |
idx |
1 |
1 |
471 |
INDEX_PAGE |
0 |
470 |
520 |
bindb |
X |
idx |
1 |
1 |
520 |
INDEX_PAGE |
0 |
471 |
521 |
bindb |
X |
idx |
1 |
1 |
521 |
INDEX_PAGE |
0 |
520 |
522 |
bindb |
X |
idx |
1 |
1 |
522 |
INDEX_PAGE |
0 |
521 |
523 |
bindb |
X |
idx |
1 |
1 |
523 |
INDEX_PAGE |
0 |
522 |
524 |
bindb |
X |
idx |
1 |
1 |
524 |
INDEX_PAGE |
0 |
523 |
525 |
bindb |
X |
idx |
1 |
1 |
525 |
INDEX_PAGE |
0 |
524 |
526 |
bindb |
X |
idx |
1 |
1 |
526 |
INDEX_PAGE |
0 |
525 |
527 |
bindb |
X |
idx |
1 |
1 |
527 |
INDEX_PAGE |
0 |
526 |
584 |
bindb |
X |
idx |
1 |
1 |
584 |
INDEX_PAGE |
0 |
527 |
585 |
bindb |
X |
idx |
1 |
1 |
585 |
INDEX_PAGE |
0 |
584 |
0 |
bindb |
X |
idx |
0 |
1 |
586 |
|
0 |
0 |
0 |
bindb |
X |
idx |
0 |
1 |
587 |
|
0 |
0 |
0 |
bindb |
X |
idx |
0 |
1 |
588 |
|
0 |
0 |
0 |
bindb |
X |
idx |
0 |
1 |
589 |
|
0 |
0 |
0 |
bindb |
X |
idx |
0 |
1 |
590 |
|
0 |
0 |
0 |
bindb |
X |
idx |
0 |
1 |
591 |
|
0 |
0 |
0 |
Summary
Είδαμε πως μπορούμε να πάρουμε internals info για το πως λειτουργεί ο SQL Server. Κρατάμε την DMF που δείξαμε παρόλο που είναι undocumented καθώς θα την χρησιμοποιήσουμε σε επόμενα άρθρα.
//Antonios Chatzipavlis