স্লট অ্যারে এবং মোট পৃষ্ঠার আকার


13

আমি অনেক ফোরামে এবং অনেকগুলি ব্লগে পড়া চালিয়ে যাচ্ছি যে নীচের মত একটি পৃষ্ঠা সমন্বিত রয়েছে: পৃষ্ঠার আকার: 16 x 512 বি = 8192 বি পৃষ্ঠা শিরোনাম: = 96 বি সর্বোচ্চ ইন_রো সারি: = 8060 বি

এই পাতা (8192 - 96 - 8060) বি = 36 বি।

ঠিক আছে, এটি যৌক্তিক এবং সঠিক। আমার কাছে প্রশ্নটি হ'ল: এত লোক কেন বলে যে বাকি 36 বি স্লট অ্যারের জন্য সংরক্ষিত?

স্পষ্টতই, স্লট অ্যারে পৃষ্ঠায় সারি প্রতি 2B দেয়; সুতরাং এটি 2B এর মতো ছোট এবং 1472 বি এর মতো বড় হতে পারে:

2 বি: 1 সারি * 2 বি = 2 বি

1472 বি: 8096 বি = এন * 9 বি (ওভারহেড সহ ন্যূনতম সারি আকার ... একক TINYINT কলাম ভাবেন) + এন * 2 বি (প্রতি সারিতে স্লট অ্যারে ব্যয়) => 8096 = 11 এন => এন = 8096/11 = 736।

736 * 2 বি = 1472 বি।

14 বি সংস্করণ ট্যাগের কারণে এটি আমার 20 বছর বয়সী হয়।

USE master ;
GO

CREATE DATABASE test ;
GO

USE test ;
GO

ALTER DATABASE test
    SET ALLOW_SNAPSHOT_ISOLATION ON ;
GO

ALTER DATABASE test
    SET READ_COMMITTED_SNAPSHOT ON ;
GO

DROP TABLE tbl ;
GO

CREATE TABLE tbl
(
      i CHAR(8000) DEFAULT(REPLICATE('a',8000))
    , j CHAR(53)   DEFAULT(REPLICATE('a',53))
) ;

INSERT INTO tbl 
    DEFAULT VALUES ;
GO

DBCC IND (test,tbl,-1) ;
GO
DBCC TRACEON(3604) ;
GO
DBCC PAGE(test,1,272,3) ;
GO

আরেকটি উদাহরণ. যদি আপনি 49 থেকে 50 এ যান তবে আপনি VOARAR (MAX) এলওবি_ডাটাতে যাবেন।

DROP TABLE tbl ;
GO

CREATE TABLE tbl
(
      i VARCHAR(MAX) DEFAULT(REPLICATE('a',8000))
    , j CHAR(49)   DEFAULT(REPLICATE('a',49))
) ;

sp_tableoption N'tbl', 'large value types out of row', 'OFF' ;
GO

INSERT INTO tbl 
    DEFAULT VALUES ;
GO

DBCC IND (test,tbl,-1) ;
GO
DBCC TRACEON(3604) ;
GO
DBCC PAGE(test,1,272,3) ;
GO

মনে হচ্ছে যে এই সমস্যাটি দেহাবশেষ Kimberly Tripp দ্বারা এই পোস্টে এমনকি SQL সার্ভার 2012 @SQLKiwi পয়েন্টে - http://www.sqlskills.com/blogs/kimberly/a-simple-start-table-creation-best-practices /


মন্তব্যগুলি বর্ধিত আলোচনার জন্য নয়; এই কথোপকথন চ্যাটে সরানো হয়েছে ।
পল হোয়াইট 9

উত্তর:


8

যেখানে পৃষ্ঠাগুলি সাজানো রানের মতো অভ্যন্তরীণ উদ্দেশ্যে ব্যবহৃত হয়, সর্বাধিক সারির আকার 8094 বাইট । ডেটা পৃষ্ঠাগুলির জন্য, অভ্যন্তরীণ সারি ওভারহেড সহ সর্বাধিক ইন-সারি আকার 8060 বাইট

অভ্যন্তরীণ সারি ওভারহেড উল্লেখযোগ্যভাবে প্রসারিত করতে পারে যদি নির্দিষ্ট ইঞ্জিন বৈশিষ্ট্য ব্যবহৃত হয়। উদাহরণস্বরূপ, স্পার্স কলামগুলি ব্যবহার করে ব্যবহারকারীর অ্যাক্সেসযোগ্য ডেটা আকারটি 8019 বাইটে হ্রাস করে।

এসকিউএল সার্ভার ২০১২ পর্যন্ত আমি জানি বাহ্যিক সারি ওভারহেডের একমাত্র উদাহরণ হ'ল সংস্করণযুক্ত সারিগুলির জন্য প্রয়োজনীয় 14 বাইট । এই বাহ্যিক ওভারহেডটি একক সারির সর্বোচ্চ স্থানের ব্যবহার 8074 বাইটে আনবে, একক স্লট অ্যারে প্রবেশের জন্য 2 বাইট, মোট 8076 বাইট তৈরি করে। এটি এখনও 8096 সীমা (8192 পৃষ্ঠার আকার - 96 বাইট স্থির শিরোনাম) এর 20 বাইট সংক্ষিপ্ত।

সম্ভবত ব্যাখ্যা আসল 8060 বাইট সীমা ভবিষ্যতে সম্প্রসারণ 34 বাইট, যার 14 সারি-ভার্সন বাস্তবায়ন জন্য ব্যবহার করা হয় বাকি।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.