আমি অনেক ফোরামে এবং অনেকগুলি ব্লগে পড়া চালিয়ে যাচ্ছি যে নীচের মত একটি পৃষ্ঠা সমন্বিত রয়েছে: পৃষ্ঠার আকার: 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 / ।