คำถามติดแท็ก data-pages

2
จะเกิดอะไรขึ้นเมื่อไม่มีหน่วยความจำกายภาพเหลืออยู่สำหรับ SQL Server
ในขณะที่ Google กำลังค้นหาข้อมูลที่ขัดแย้งกัน บางเว็บไซต์ระบุว่าเมื่อไม่มีหน่วยความจำกายภาพเหลืออยู่สำหรับข้อมูล SQL Server จะย้ายข้อมูลที่มีอยู่แล้วลงใน TEMPDB (ดู: SQL Server: Demystifying TempDb และคำแนะนำ ) แต่เว็บไซต์อื่น ๆ ระบุว่าเมื่อมีหน่วยความจำกายภาพเหลืออยู่ไม่เพียงพอระบบปฏิบัติการสามารถใช้ PAGE FILE และย้ายข้อมูลจากหน่วยความจำกายภาพไปยังมัน (ดูหน้าไฟล์สำหรับ SQL Server ) ฉันสงสัยว่า SQL Server เขียนข้อมูลเมื่อใดหน่วยความจำกายภาพหมด? หากต้องการ tempdb หรือไปยังไฟล์หน้า OS? หรืออาจจะทั้งคู่?

1
ฉันจะแยก ctid ลงในหมายเลขหน้าและแถวได้อย่างไร
แต่ละแถวในตารางมีคอลัมน์ระบบ ctidประเภทtidที่แสดงถึงตำแหน่งทางกายภาพของแถว: create table t(id serial); insert into t default values; insert into t default values; select ctid , id from t; ctid | รหัส : ---- | -: (0,1) | 1 (0,2) | 2 dbfiddle ที่นี่ อะไรคือวิธีที่ดีที่สุดในการได้รับเพียงจำนวนหน้าเป็นจากctidในประเภทที่เหมาะสมที่สุด (เช่นinteger, bigintหรือnumeric(1000,0))? วิธีเดียวที่ฉันสามารถคิดเป็นน่าเกลียดมาก

1
ดัชนีที่บีบอัด SQL Server ยังคงถูกบีบอัดในการสร้างใหม่โดยไม่ระบุการบีบอัดข้อมูลหรือไม่
หลังจากสร้างดัชนี SQL Server อีกครั้งโดยใช้การบีบอัดหน้า ( ALTER INDEX IX1 REBUILD PARTITION = ALL WITH (DATA_COMPRESSION = PAGE)) ให้ทำการสร้างใหม่ในภายหลัง (ตามที่สคริปต์การบำรุงรักษาบางรายการผ่านเกณฑ์การแตกแฟรกเมนต์) จำเป็นต้องระบุการบีบอัดข้อมูลอีกครั้งหรือไม่ มิฉะนั้นดัชนีจะแตกอย่างมีประสิทธิภาพหรือไม่

3
ไม่ได้ใช้ 512 ไบต์จากหน้าข้อมูล 8 KByte ของ SQL Server
ฉันสร้างตารางต่อไปนี้: CREATE TABLE dbo.TestStructure ( id INT NOT NULL, filler1 CHAR(36) NOT NULL, filler2 CHAR(216) NOT NULL ); จากนั้นสร้างดัชนีคลัสเตอร์: CREATE CLUSTERED INDEX idx_cl_id ON dbo.TestStructure(id); ต่อไปฉันเติมด้วย 30 แถวแต่ละขนาดคือ 256 ไบต์ (ตามประกาศตาราง): DECLARE @i AS int = 0; WHILE @i < 30 BEGIN SET @i = @i + 1; INSERT INTO …

1
Array ของช่องและขนาดหน้าทั้งหมด
ฉันอ่านต่อในฟอรัมจำนวนมากและในหลาย ๆ บล็อกที่หน้าประกอบด้วยดังต่อไปนี้: ขนาดหน้า: 16 x 512B = 8192B ส่วนหัวของหน้า: = 96B แถว In_Row สูงสุด: = 8060B ใบนี้ (8192 - 96 - 8060) B = 36B ตกลงนี่เป็นตรรกะและถูกต้อง คำถามที่ฉันมีคือ: ทำไมผู้คนมากมายพูดว่า 36B ที่เหลือถูกสงวนไว้สำหรับอาร์เรย์สล็อต? เห็นได้ชัดว่าอาร์เรย์สล็อตให้ 2B ต่อแถวในหน้า; ดังนั้นอาจเล็กเพียง 2B และใหญ่ถึง 1472B: 2B: 1 แถว * 2B = 2B 1472B: 8096B = n * …

1
SQL Server - หน้าข้อมูลถูกจัดเก็บอย่างไรเมื่อใช้ดัชนีแบบคลัสเตอร์
ฉันเพิ่งได้ยินว่าหน้าข้อมูลในดัชนีคลัสเตอร์ไม่ได้ถูกจัดเก็บอย่างต่อเนื่อง มันเป็นเรื่องจริงเหรอ? บางทีหน้าข้อมูลมักจะถูกจัดเก็บอย่างต่อเนื่องพร้อมกับข้อยกเว้นบางอย่างสำหรับกฎ หรือบางทีฉันได้ยินผิดและหน้าข้อมูลถูกจัดเก็บอย่างต่อเนื่องเสมอ ขอบคุณมาก.

2
SUM จาก DATALENGTHs ไม่ตรงกับขนาดตารางจาก sys.allocation_units
ฉันอยู่ภายใต้ความประทับใจว่าถ้าฉันจะรวมผลรวมDATALENGTH()ของเขตข้อมูลทั้งหมดสำหรับระเบียนทั้งหมดในตารางที่ฉันจะได้รับขนาดทั้งหมดของตาราง ฉันเข้าใจผิด SELECT SUM(DATALENGTH(Field1)) + SUM(DATALENGTH(Field2)) + SUM(DATALENGTH(Field3)) TotalSizeInBytes FROM SomeTable WHERE X, Y, and Z are true ฉันใช้แบบสอบถามนี้ด้านล่าง (ที่ฉันได้จากออนไลน์เพื่อรับขนาดตารางดัชนีคลัสเตอร์เท่านั้นดังนั้นจึงไม่รวมดัชนี NC) เพื่อรับขนาดของตารางเฉพาะในฐานข้อมูลของฉัน เพื่อวัตถุประสงค์ในการเรียกเก็บเงิน (เราเรียกเก็บเงินแผนกของเราตามจำนวนเนื้อที่ที่พวกเขาใช้) ฉันต้องทราบว่าแต่ละแผนกใช้พื้นที่เท่าใดในตารางนี้ ฉันมีแบบสอบถามที่ระบุแต่ละกลุ่มภายในตาราง ฉันแค่ต้องคิดออกว่าแต่ละกลุ่มจะมีพื้นที่ว่างเท่าใด ช่องว่างต่อแถวอาจแกว่งอย่างมากเนื่องจากVARCHAR(MAX)ฟิลด์ในตารางดังนั้นฉันจึงไม่สามารถใช้ขนาดเฉลี่ย * อัตราส่วนของแถวสำหรับแผนก เมื่อฉันใช้DATALENGTH()วิธีการที่อธิบายข้างต้นฉันได้รับเพียง 85% ของพื้นที่ทั้งหมดที่ใช้ในแบบสอบถามด้านล่าง คิด? SELECT s.Name AS SchemaName, t.NAME AS TableName, p.rows AS RowCounts, (SUM(a.total_pages) * 8)/1024 AS TotalSpaceMB, (SUM(a.used_pages) …

2
การลบไฟล์ข้อมูลทุติยภูมิ DBCC SHRINKFILE: ไม่สามารถย้ายหน้าได้เนื่องจากเป็นหน้าตารางงาน
ฉันมีมากเกินไปไฟล์ข้อมูลทุติยภูมิ (.ndf) tempdbที่สร้างขึ้นสำหรับ ในการลบไฟล์ส่วนเกินฉันต้องล้างไฟล์ (เนื้อหาจะถูกย้ายไปยังไฟล์อื่น): DBCC SHRINKFILE('tempdbfile8', EMPTYFILE); แล้วลบไฟล์: ALTER DATABASE tempdb REMOVE FILE tempdbfile8; แต่EMPTYFILEคำสั่งจะส่งคืนข้อผิดพลาด: DBCC SHRINKFILE: Page 8:41920 could not be moved because it is a work table page. Msg 2555, Level 16, State 1, Line 2 Cannot move all contents of file "tempdbfile8" to other places to …

1
ค่าใช้จ่ายของแถวเมื่อใช้การบีบอัดหน้า?
ฉันสร้างตารางที่มี 650 คอลัมน์ (19,4) คอลัมน์ เมื่อฉันเปิดการบีบอัดหน้าโดยเรียกใช้ ALTER TABLE fct.MyTable REBUILD WITH (DATA_COMPRESSION = PAGE); ฉันเข้าใจ ข่าวสารเกี่ยวกับ 1975, ระดับ 16, สถานะ 1 ดัชนี 'PK_Mytable' ความยาวแถวเกินความยาวสูงสุดที่อนุญาตได้ของ '8060' ไบต์ แต่ 650 ครั้ง 9 ไบต์มีเพียง 5850 ไบต์ซึ่งค่อนข้างไกลจากขีด จำกัด ที่ระบุไว้ที่ 8060 ไบต์ เซิร์ฟเวอร์กำลังเรียกใช้ Windows 2012 r2 ด้วย SQL Server 2016 SP1 CU2 ค่าใช้จ่ายของแถวเมื่อใช้การบีบอัดหน้า? นี่คือรหัสเพื่อแสดงสิ่งที่ฉันหมายถึง: /* …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.