คำถามติดแท็ก fragmentation

แฟรกเมนต์มีอยู่เมื่อดัชนีมีเพจที่การจัดลำดับตรรกะตามค่าคีย์ไม่ตรงกับลำดับฟิสิคัลภายในไฟล์ข้อมูล

3
เพราะเหตุใดฐานข้อมูลของฉันยังคงกระจัดกระจายหลังจากฉันสร้างและทำดัชนีใหม่ทุกอย่างแล้ว
ฉันมีฐานข้อมูลที่ฉันพยายามจัดระเบียบตารางทั้งหมดในครั้งเดียวโดยใช้ T-SQL นี้: SELECT 'ALTER INDEX all ON ' + name + ' REORGANIZE;' + CHAR(10) + 'ALTER INDEX all ON ' + name + ' REBUILD;' FROM sys.tables จากนั้นคัดลอกและวางผลลัพธ์ไปยังหน้าต่างแบบสอบถามใหม่และเรียกใช้สิ่งนั้น ฉันไม่มีข้อผิดพลาด แต่ฉันยังมีการแยกส่วน ฉันพยายามเรียกใช้ทั้งสองคำสั่งแยกกันด้วยและยังมีการแยกส่วน หมายเหตุ:ฉันทราบว่าREORGANIZEไม่จำเป็นโดย Aaron และฉันรู้ว่าฉันสามารถใช้ไดนามิก sql เพื่อทำสิ่งนี้โดยอัตโนมัติ ฉันรันสิ่งนี้เพื่อพิจารณาว่าฉันยังมีการแยกส่วน: SELECT * FROM sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL , NULL, NULL) WHERE …

3
ทำไมดัชนี REBUILD ไม่ลดการแยกส่วนดัชนี?
ฉันใช้ ALTER INDEX REBUILD เพื่อลบการแตกแฟรกเมนต์ดัชนี ในบางกรณี REBUILD ดูเหมือนจะไม่ลบการกระจายตัวของนี้ อะไรคือสาเหตุที่ REBUILD ไม่ลบการแยกส่วน? ดูเหมือนว่าสิ่งนี้จะเกิดขึ้นโดยเฉพาะกับดัชนีขนาดเล็ก

4
มีอะไรดีไปกว่าการเปลี่ยนแปลงตาราง: DELETE และ INSERT ทุกครั้งหรือมีการอัพเดทอยู่
ฉันกำลังทำโปรเจ็กต์ที่ต้องเปลี่ยนระเบียนประมาณ 36K ในหนึ่งตารางทุกวัน ฉันสงสัยว่าอะไรจะทำงานได้ดีกว่า: ลบแถวและแทรกแถวใหม่หรือ อัปเดตแถวที่มีอยู่แล้ว สำหรับฉันมันง่ายกว่าที่จะลบแถวทั้งหมดและแทรกแถวใหม่ แต่ถ้านี่จะแยกส่วนของตารางและดัชนีและผลกระทบต่อประสิทธิภาพการทำงานแล้วฉันอยากจะอัปเดตเมื่อเป็นไปได้และลบ / แทรกเมื่อจำเป็นเท่านั้น นี่จะเป็นการให้บริการทุกคืนและฉันไม่ต้องการปรับปรุงความเร็วของกระบวนการเอง ฉันกังวลมากขึ้นเกี่ยวกับประสิทธิภาพของการสืบค้นเทียบกับตารางนี้โดยทั่วไปซึ่งฉันมี 89 ล้านบันทึกแล้วและกระบวนการคืนนี้จะส่งผลกระทบต่อมันอย่างไร ฉันควรลบ / แทรกบันทึกหรือฉันควรปรับปรุงรายการที่มีอยู่ (หากเป็นไปได้) สำหรับกระบวนการทุกคืน?

2
ตารางระบบ SQL Server สามารถจัดระเบียบได้หรือไม่?
เรามีฐานข้อมูลหลายแห่งที่สร้างและวางตารางจำนวนมาก จากสิ่งที่เราสามารถบอกได้ SQL Server จะไม่ทำการบำรุงรักษาภายในใด ๆ บนตารางฐานของระบบซึ่งหมายความว่าพวกเขาสามารถแยกส่วนกันมากในช่วงเวลาและขนาด bloated สิ่งนี้ทำให้เกิดความกดดันที่ไม่จำเป็นในบัฟเฟอร์พูลและยังส่งผลเสียต่อประสิทธิภาพการทำงานเช่นการคำนวณขนาดของตารางทั้งหมดในฐานข้อมูล ไม่มีใครมีคำแนะนำสำหรับการลดการกระจายตัวของบนตารางหลักภายในเหล่านี้หรือไม่ วิธีแก้ปัญหาที่ชัดเจนวิธีหนึ่งสามารถหลีกเลี่ยงการสร้างตารางจำนวนมาก (หรือสร้างตารางชั่วคราวทั้งหมดใน tempdb) แต่สำหรับจุดประสงค์ของคำถามนี้สมมติว่าแอปพลิเคชันไม่มีความยืดหยุ่นนั้น แก้ไข: การวิจัยเพิ่มเติมแสดงคำถามที่ยังไม่ได้ตอบซึ่งมีความเกี่ยวข้องอย่างใกล้ชิดและระบุว่าการบำรุงรักษาด้วยตนเองบางรูปแบบผ่านทางALTER INDEX...REORGANIZEอาจเป็นตัวเลือก การวิจัยเบื้องต้น ข้อมูลเมตาเกี่ยวกับตารางเหล่านี้สามารถดูได้ในsys.dm_db_partition_stats: -- The system base table that contains one row for every column in the system SELECT row_count, (reserved_page_count * 8 * 1024.0) / row_count AS bytes_per_row, reserved_page_count/128. AS space_mb FROM sys.dm_db_partition_stats …

3
ขนาดฐานข้อมูลเริ่มต้นของ PostgreSQL
คำถามของฉันมี 2 ส่วน มีวิธีการระบุขนาดเริ่มต้นของฐานข้อมูลใน PostgreSQL หรือไม่? หากไม่มีคุณจะจัดการกับการแตกแฟรกเมนต์อย่างไรเมื่อฐานข้อมูลเติบโตขึ้นตามกาลเวลา ฉันเพิ่งย้ายจาก MSSQL ไปยัง Postgres และหนึ่งในสิ่งที่เราทำในโลก MSSQL เมื่อสร้างฐานข้อมูลคือการระบุขนาดเริ่มต้นของฐานข้อมูลและบันทึกธุรกรรม การกระจายตัวที่ลดลงนี้และประสิทธิภาพที่เพิ่มขึ้นโดยเฉพาะอย่างยิ่งถ้าขนาด "ปกติ" ของฐานข้อมูลเป็นที่รู้จักกันล่วงหน้า ประสิทธิภาพของฐานข้อมูลของฉันลดลงตามขนาดที่เพิ่มขึ้น ตัวอย่างเช่นปริมาณงานที่ฉันวางผ่านตามปกติใช้เวลา 10 นาที เมื่อฐานข้อมูลเติบโตขึ้นเวลานี้จะเพิ่มขึ้น การทำ VACUUM, VACUUM FULL และ VACUUM FULL ANALYZE ไม่ปรากฏขึ้นเพื่อแก้ไขปัญหา สิ่งที่แก้ปัญหาด้านประสิทธิภาพคือการหยุดฐานข้อมูลแยกส่วนไดรฟ์แล้วทำการ VACUUM FULL ANALYZE ใช้เวลาทดสอบประสิทธิภาพของฉันกลับไปเป็น 10 นาทีเดิม สิ่งนี้ทำให้ฉันสงสัยว่าการแตกออกเป็นส่วน ๆ คือสิ่งที่ทำให้ฉันเจ็บปวด ฉันไม่สามารถค้นหาการอ้างอิงถึงการจองพื้นที่ตาราง / ฐานข้อมูลใน Postgres ได้ ฉันกำลังใช้คำศัพท์ที่ไม่ถูกต้องและไม่พบสิ่งใดเลยหรือมีวิธีอื่นในการลดการแตกแฟรกเมนต์ของระบบไฟล์ใน Postgres ตัวชี้ใด ๆ …

2
การบำรุงรักษาดัชนี MySQL
ฉันทำวิจัยจำนวนมากเกี่ยวกับวิธีการบำรุงรักษาดัชนีใน MySQL เพื่อป้องกันการแตกแฟรกเมนต์และเพื่อเพิ่มประสิทธิภาพการดำเนินการของแบบสอบถามบางอย่าง ฉันคุ้นเคยกับสูตรนั้นที่คำนวณอัตราส่วนระหว่างพื้นที่ว่างสูงสุดที่มีอยู่สำหรับตาราง VS พื้นที่ที่ใช้โดยข้อมูลและดัชนี อย่างไรก็ตามคำถามหลักของฉันยังคงไม่มีคำตอบ บางทีนี่อาจเป็นเพราะฉันคุ้นเคยกับการบำรุงรักษาดัชนีใน SQL Server และฉันมักจะคิดว่าใน MySQL มันควรจะคล้ายกัน ในเซิร์ฟเวอร์ SQL คุณสามารถมีดัชนีได้หลายดัชนีและแต่ละดัชนีสามารถมีการแตกแฟรกเมนต์ระดับต่างกัน จากนั้นคุณสามารถเลือกและดำเนินการ 'REORGANIZE' หรือ 'REBUILD' ในดัชนีนั้นโดยไม่กระทบต่อส่วนที่เหลือ ความรู้ของฉันอย่างดีที่สุดไม่มี 'การแตกแฟรกเมนต์ของตาราง' และ SQL Server ไม่ได้จัดเตรียมเครื่องมือใด ๆ เพื่อแก้ไข 'การแตกแฟรกเมนต์ตาราง' สิ่งที่มีให้คือเครื่องมือในการตรวจสอบการแตกแฟรกเมนต์ของดัชนี (เข้าใจเช่นอัตราส่วนระหว่างจำนวนหน้าที่ใช้โดยดัชนีเทียบกับความสมบูรณ์ของหน้าและความต่อเนื่องกัน) รวมทั้งการกระจายตัวของภายในและภายนอก ทั้งหมดนี้ค่อนข้างตรงไปตรงมาที่จะเข้าใจอย่างน้อยก็สำหรับฉัน ตอนนี้เมื่อถึงคราวที่ต้องรักษาดัชนีใน MySQL จะมีเพียงแนวคิดของ 'การแตกแฟรกเมนต์ของตารางดังกล่าวข้างต้น ตารางใน MySQL สามารถมีดัชนีได้หลายดัชนี แต่เมื่อฉันตรวจสอบ 'อัตราส่วนการกระจายตัวของ' ด้วยสูตรที่มีชื่อเสียงนั้นฉันไม่เห็นการกระจายตัวของดัชนีแต่ละรายการ แต่ตารางโดยรวม เมื่อฉันต้องการเพิ่มประสิทธิภาพดัชนีใน MySQL ฉันไม่ได้เลือกดัชนีเฉพาะเพื่อดำเนินการ (เช่นใน SQL …

2
วิธีการป้องกันการกระจายตัวของดัชนีรายวัน 99%
ฉันมีตารางคะแนนสูงสุดสำหรับผู้เล่น 100,000 คนที่ถูกแทรกลงในวันละ 2 ครั้งโดยมีหนึ่งระเบียนต่อผู้เล่นหนึ่งคน ในตอนท้ายของวันการกระจายตัวของดัชนีสำหรับดัชนีในตารางนั้นคือ 99% มีวิธีการป้องกันโดยการปรับการตั้งค่า? CREATE TABLE HighScore( [id] [int] IDENTITY(1,1) NOT NULL, [user] [int] NULL, [player] [int] NULL, [round] [tinyint] NULL, [group] [int] NULL, [rank] [int] NULL, [delta] [int] NULL, [roundpoints] [int] NULL, [totalpoints] [int] NULL, PRIMARY KEY CLUSTERED ( [id] ASC )WITH (PAD_INDEX = OFF, …

1
จัดเรียงข้อมูล SQL Server และไฟล์บันทึกการทำงานด้วย MoveFile API
นายจ้างของฉันกำลังมองหาการปรับใช้ซอฟต์แวร์การจัดเรียงข้อมูล NTFS ที่ใช้ Windows MoveFile API เพื่อจัดเรียงข้อมูลไฟล์ที่เปิดอยู่ สิ่งนี้จะได้รับการปรับใช้กับเซิร์ฟเวอร์ SQL Server นับพันที่รัน SQL เวอร์ชันตั้งแต่ 2005-2012 และ Windows เวอร์ชั่นตั้งแต่ปี 2003 และ 2008 R2 หากเป็นเรื่องสำคัญผลิตภัณฑ์ที่ฉันกำลังพูดถึงคือ PerfectDisk แต่ฉันเชื่อว่ามีโปรแกรมที่คล้ายกันซึ่งทำงานในลักษณะเดียวกัน การทดสอบจนถึงตอนนี้ยังไม่พบปัญหามากมายนอกเหนือจากปัญหาประสิทธิภาพ I / O เป็นครั้งคราวซึ่งไม่แปลกใจและสามารถแก้ไขได้ด้วยการจัดกำหนดการใหม่และปรับการจัดระเบียบ อย่างไรก็ตามฉันกังวลเกี่ยวกับความเสี่ยงของข้อมูลที่เสียหายมากขึ้น ใครบ้างที่นี่มีประสบการณ์ใช้งานซอฟต์แวร์ประเภทนี้ในการผลิตบนเซิร์ฟเวอร์ฐานข้อมูลหรือไม่ คุณเคยประสบปัญหาข้อมูลเสียหายหรือไม่? ฉันค่อนข้างไม่สบายใจเกี่ยวกับเรื่องนี้แม้ว่าจะไม่สามารถหาหลักฐานที่ชัดเจนว่าเป็นปัญหา ขอบคุณสำหรับคำตอบใด ๆ แก้ไขเพื่อเพิ่ม: ความคิดที่น่ากลัวนี้เพิ่งถูกลืมไปแล้วอาจเป็นส่วนหนึ่งเนื่องจากคำเตือนบางอย่างที่ฉันให้ไว้

2
การแตกแฟรกเมนต์ดัชนีขณะประมวลผลอย่างต่อเนื่อง
SQL Server 2005 ฉันต้องสามารถประมวลผลระเบียน 350M อย่างต่อเนื่องในตารางบันทึก 900M แบบสอบถามที่ฉันใช้เพื่อเลือกระเบียนที่จะดำเนินการจะแยกส่วนอย่างไม่ดีตามที่ฉันดำเนินการและฉันจำเป็นต้องหยุดการประมวลผลเพื่อสร้างดัชนีใหม่ จำลองข้อมูล & คิวรีแบบหลอก ... /**************************************/ CREATE TABLE [Table] ( [PrimaryKeyId] [INT] IDENTITY(1,1) NOT NULL PRIMARY KEY CLUSTERED, [ForeignKeyId] [INT] NOT NULL, /* more columns ... */ [DataType] [CHAR](1) NOT NULL, [DataStatus] [DATETIME] NULL, [ProcessDate] [DATETIME] NOT NULL, [ProcessThreadId] VARCHAR (100) NULL ); …

1
วิธีการลดการกระจายตัวของฮีปใน SQL Server
ฉันเพิ่งพบว่าหนึ่งตารางกองมีการกระจายตัวมากกว่า 70% ดังนั้นฉันตัดสินใจที่จะทำ ALTER TABLE dbo.myTable REBUILD ตลกพอหลังจากนั้นฉันแยกส่วน 20% ไม่มีการเขียนบนโต๊ะนั้นตั้งแต่นั้นเป็นต้นมา ดังนั้นฉันจึงตัดสินใจที่จะสร้างใหม่อีกครั้ง หลังจากครั้งที่ 2 หมวกตารางการกระจายตัว 50% ดังนั้นยิ่ง! ฉันไม่เข้าใจจริงๆว่ามันจะเกิดอะไรขึ้น ...
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.