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

แบ่งตารางฐานข้อมูลออกเป็นหลายส่วนเพื่อประสิทธิภาพหรือความสามารถในการจัดการ

3
การแบ่งพาร์ติชันตารางช่วยได้อย่างไร
ฉันมีปัญหาในการคว้าความคิดของข้อดีและข้อเสียของการแบ่งตาราง ฉันกำลังจะเริ่มทำงานในโครงการซึ่งจะมี 8 ตารางและหนึ่งในนั้นจะเป็นตารางข้อมูลหลักที่จะเก็บบันทึก 180-260 ล้าน เนื่องจากมันจะถูกทำดัชนีตารางอย่างถูกต้องดังนั้นฉันคิดว่าการ จำกัด ระเบียนของตารางไว้ที่ 20 ล้านด้วยวิธีนี้ฉันจะต้องสร้างตาราง 9-13 แต่ฉันไม่แน่ใจว่ามันจะปรับปรุงประสิทธิภาพได้อย่างไรเพราะพวกเขาจะนั่งอยู่บนเครื่องเดียวกัน (32GB RAM)? ฉันใช้ MySQL และตารางจะเป็น MyISAM และตารางใหญ่จะมีดัชนีในฟิลด์ id และไม่มีความซับซ้อนเพิ่มเติมเช่นการค้นหาข้อความแบบเต็มเป็นต้น โปรดแสดงการแบ่งตารางเทียบกับการแบ่งพาร์ติชันฐานข้อมูลด้วย

1
การเพิ่มประสิทธิภาพดัชนีพร้อมวันที่
คำถามนี้ถูกโยกย้ายจาก Stack Overflow เพราะสามารถตอบได้ใน Exchange Administrators Stack Exchange อพยพ 7 ปีที่ผ่านมา ฉันมีตารางวัตถุขนาดใหญ่ (แถว 15M +) ใน PostgreSQL 9.0.8 ซึ่งฉันต้องการค้นหาเขตข้อมูลที่ล้าสมัย ฉันต้องการแบ่งคำถามเป็นล้าน ๆ เพื่อความยืดหยุ่นในการปรับขนาดและการทำงานพร้อมกันและฉันต้องการดึงข้อมูลทั้งหมดด้วยฟิลด์ updated_at ด้วยวันที่ไม่กี่วันที่ผ่านมา ฉันได้ลองใช้ดัชนีจำนวนมากและข้อความค้นหาหลายล้านรายการและดูเหมือนว่าฉันจะไม่สามารถทำงานได้ภายใน 100 วินาทีด้วยฮาร์ดแวร์ Ronin ของ Heroku ฉันกำลังมองหาคำแนะนำที่ฉันไม่ได้พยายามทำให้มีประสิทธิภาพมากที่สุด ลอง # 1 EXPLAIN ANALYZE SELECT count(*) FROM objects WHERE (date(updated_at)) < (date(now())-7) AND id >= 5000001 AND id …

3
พาร์ติชันคีย์ต้องเป็นส่วนหนึ่งของคีย์หลักด้วยหรือไม่
ฉันกำลังแบ่งตารางตามคอลัมน์ที่ไม่ใช่คีย์หลักหรือไม่ ฉันได้อ่านข้อมูลที่ขัดแย้งกันในวันนี้แล้วว่าคอลัมน์พาร์ติชันต้องเป็นส่วนหนึ่งของคีย์หลักหรือไม่ ไส้ของฉันบอกว่าไม่ แต่ฉันไม่แน่ใจ 100% ดังนั้นคำถาม ... คอลัมน์พาร์ติชันจะต้องเป็นส่วนหนึ่งของหลักหรือไม่ มันแนะนำวิธีหนึ่งหรืออื่น ๆ ? ฉันต้องสร้างดัชนีสำหรับพาร์ติชันคีย์หรือไม่ DBMS ทำมันเองโดยอัตโนมัติหรือไม่?

3
ฉันจะรับรายการตารางที่แบ่งพาร์ติชันทั้งหมดในฐานข้อมูลของฉันได้อย่างไร
ฉันจะรับรายการตารางที่แบ่งพาร์ติชันทั้งหมดในฐานข้อมูลของฉันได้อย่างไร ฉันควรดูตารางระบบ / DMVs ใด

2
วิธีการแบ่งพาร์ติชันตารางที่ไม่มีการแบ่งพาร์ติชันที่มีอยู่
ฉันมีตารางที่มีข้อมูลอยู่แล้ว: dbo.Test (col1,col2,col3....) ON [PRIMARY] ฉันต้องเปลี่ยนตารางนี้เพื่อให้มีการแบ่งพาร์ติชันเช่นนี้: dbo.Test(col1,col2,col3....) ON Ps_Date(Col2) ฉันจะทำสิ่งนี้ให้สำเร็จโดยไม่ต้องวางและสร้างโต๊ะขึ้นใหม่ได้อย่างไร?

1
แสวงหาและคุณจะสแกน ... บนตารางที่แบ่งพาร์ติชัน
ฉันได้อ่านบทความเหล่านี้ใน PCMag โดยItzik Ben-Gan : แสวงหาและคุณจะสแกนส่วนที่ 1: เมื่อเครื่องมือเพิ่มประสิทธิภาพไม่ได้ปรับให้เหมาะสม แสวงหาและคุณจะสแกนส่วนที่สอง: คีย์จากน้อยไปมาก ขณะนี้ฉันมีปัญหา "Grouped Max" กับตารางที่แบ่งพาร์ติชันทั้งหมดของเรา เราใช้เคล็ดลับ Itzik Ben-Gan ที่ให้ไว้เพื่อรับ max (ID) แต่บางครั้งก็ไม่ได้ทำงาน: DECLARE @MaxIDPartitionTable BIGINT SELECT @MaxIDPartitionTable = ISNULL(MAX(IDPartitionedTable), 0) FROM ( SELECT * FROM ( SELECT partition_number PartitionNumber FROM sys.partitions WHERE object_id = OBJECT_ID('fct.MyTable') AND index_id = 1 ) T1 …

2
เป็นไปได้หรือไม่ที่จะบังคับให้เครื่องมือเพิ่มประสิทธิภาพกำจัดตารางที่ไม่เกี่ยวข้องในมุมมองที่แบ่งพาร์ติชันนี้
ฉันกำลังทดสอบสถาปัตยกรรมที่แตกต่างกันสำหรับตารางขนาดใหญ่และข้อเสนอแนะอย่างหนึ่งที่ฉันเห็นคือใช้มุมมองที่แบ่งพาร์ติชันโดยที่ตารางขนาดใหญ่จะแบ่งออกเป็นชุดที่มีขนาดเล็กลง 1 , 2 , 3 , 4 ในการทดสอบวิธีการนี้ฉันได้ค้นพบบางสิ่งที่ไม่สมเหตุสมผลสำหรับฉัน เมื่อฉันกรอง "การแบ่งคอลัมน์" ในมุมมองข้อเท็จจริงเครื่องมือเพิ่มประสิทธิภาพจะค้นหาเฉพาะในตารางที่เกี่ยวข้องเท่านั้น นอกจากนี้หากฉันกรองคอลัมน์นั้นบนตารางมิติเครื่องมือเพิ่มประสิทธิภาพจะกำจัดตารางที่ไม่จำเป็น อย่างไรก็ตามถ้าฉันกรองส่วนอื่น ๆ ของมิติตัวเพิ่มประสิทธิภาพจะค้นหา PK / CI ของแต่ละตารางพื้นฐาน นี่คือคำถามที่ถาม: select od.[Year], AvgValue = avg(ObservationValue) from dbo.v_Observation o join dbo.ObservationDates od on o.ObservationDateKey = od.DateKey where o.ObservationDateKey >= 20000101 and o.ObservationDateKey <= 20051231 group by od.[Year]; select od.[Year], AvgValue …

2
เป็นวิธีที่ทันสมัยในการแบ่งพาร์ติชัน PostgreSQL ในเครื่องต่าง ๆ เมื่อข้อมูลคือ“ การแบ่งพาร์ติชันตามธรรมชาติ”
คำถามนี้ถูกโยกย้ายจาก Stack Overflow เพราะสามารถตอบได้ใน Exchange Administrators Stack Exchange อพยพ 7 ปีที่ผ่านมา หลังจากผ่านไปหลายปีที่อาศัยอยู่ในพื้นที่ "NoSQL" ตอนนี้ฉันมีปัญหาที่ค่อนข้าง "เชิงสัมพันธ์" ในธรรมชาติ วันนี้ฉันเห็นร้านค้าข้อมูลที่มีดวงตาที่แตกต่างไปจากเดิม สิ่งที่คล้ายกับ Riak ทำให้ฉันเสียไปในทางที่ฉันจะทนต่อความล้มเหลวเพียงจุดเดียวไม่ได้อีกต่อไป "ลงเพื่อซ่อมบำรุง" ฯลฯ แน่นอนว่า (หรือฉันหวังว่า) ฉันไม่ได้สติเสียอีกเลย นี่เป็นโครงการส่วนบุคคลที่ยังไม่ค่อยมีข้อกำหนดที่สูงมาก วิธีแก้ไขปัญหาส่วนใหญ่ไม่ได้ให้สิ่งที่ฉันต้องการ (อย่างน้อยก็เหลือบ) อาจเป็นเพราะปัญหาของฉันค่อนข้าง "ง่าย" ในการแก้ปัญหา อย่างน้อยในระดับแนวคิด (ละเว้นข้อ จำกัด ที่ RDBMs นำมาสู่ตาราง) ฉันมีข้อมูล "แบ่งปัน" เล็กน้อยซึ่งสามารถทำซ้ำได้อย่างอิสระ มันไม่ได้มีข้อกำหนดของความมั่นคงอย่างหนัก สิ่งนี้สามารถเก็บไว้ในฐานข้อมูลที่เหมือนไดนาโมและจะขยายได้อย่างไม่ จำกัด แต่ฉันก็ยังอยากจะไปกับฐานข้อมูลเดียวถ้าเป็นไปได้ ฉันมีข้อมูล "ต่อผู้ใช้" มากมาย นั่นคือ - ผู้ใช้จำนวนมากด้วยผู้ใช้ทุกคนที่มีข้อมูลที่มีขนาดพอเหมาะพอดีจะเก็บไว้ในโหนด …

1
สถิติหายไปหลังจากการอัพเดตที่เพิ่มขึ้น
เรามีฐานข้อมูล SQL Server ขนาดใหญ่ที่แบ่งพาร์ติชันโดยใช้สถิติที่เพิ่มขึ้น ดัชนีทั้งหมดได้รับการแบ่งพาร์ติชันแล้ว เมื่อเราพยายามที่จะสร้างพาร์ติชันออนไลน์ใหม่โดยการแบ่งพาร์ติชันสถิติทั้งหมดจะหายไปหลังจากสร้างดัชนีใหม่ ด้านล่างเป็นสคริปต์เพื่อทำซ้ำปัญหาใน SQL Server 2014 ด้วยฐานข้อมูล AdventureWorks2014 --Example against AdventureWorks2014 Database CREATE PARTITION FUNCTION TransactionRangePF1 (DATETIME) AS RANGE RIGHT FOR VALUES ( '20130501', '20130601', '20130701', '20130801', '20130901', '20131001', '20131101', '20131201', '20140101', '20140201', '20140301' ); GO CREATE PARTITION SCHEME TransactionsPS1 AS PARTITION TransactionRangePF1 TO ( [PRIMARY], …

2
SQL Server ไม่ปรับการรวมการผสานแบบขนานบนตารางที่แบ่งพาร์ติชันอย่างเท่าเทียมกันสองตาราง
คำถามนี้ถูกโยกย้ายจาก Stack Overflow เพราะสามารถตอบได้ใน Exchange Administrators Stack Exchange อพยพ 7 ปีที่ผ่านมา ขออภัยล่วงหน้าสำหรับคำถามที่ละเอียดมาก ฉันได้รวมคิวรี่เพื่อสร้างชุดข้อมูลแบบเต็มสำหรับการทำซ้ำปัญหาและฉันใช้ SQL Server 2012 บนเครื่อง 32-core อย่างไรก็ตามฉันไม่คิดว่านี่เป็นเฉพาะของ SQL Server 2012 และฉันได้บังคับ MAXDOP เป็น 10 สำหรับตัวอย่างนี้โดยเฉพาะ ฉันมีสองตารางที่แบ่งพาร์ติชันโดยใช้ชุดรูปแบบพาร์ติชันเดียวกัน เมื่อรวมพวกเขาเข้าด้วยกันในคอลัมน์ที่ใช้สำหรับการแบ่งพาร์ติชันฉันสังเกตว่า SQL Server ไม่สามารถเพิ่มประสิทธิภาพการรวมแบบขนานได้มากเท่าที่คาดไว้และเลือกที่จะใช้ HASH JOIN แทน ในกรณีพิเศษนี้ฉันสามารถจำลอง MERGE JOIN ที่เหมาะสมกว่าด้วยตนเองโดยแบ่งแบบสอบถามออกเป็น 10 ช่วงแยกจากกันตามฟังก์ชันพาร์ติชันและเรียกใช้แบบสอบถามแต่ละชุดใน SSMS พร้อมกัน การใช้ WAITFOR เพื่อเรียกใช้ทั้งหมดในเวลาเดียวกันอย่างแม่นยำผลลัพธ์คือแบบสอบถามทั้งหมดทำให้เสร็จสมบูรณ์ใน ~ 40% ของเวลาทั้งหมดที่ใช้โดย HASH …

2
วิธีการแบ่งพาร์ติชันตารางที่มีอยู่ใน postgres
ฉันต้องการพาร์ติชันตารางที่มี 1M + แถวตามช่วงวันที่ วิธีนี้ทำได้โดยไม่ต้องหยุดทำงานหรือเสี่ยงต่อการสูญเสียข้อมูล นี่คือกลยุทธ์ที่ฉันกำลังพิจารณา แต่เปิดรับข้อเสนอแนะ: ตารางที่มีอยู่คือต้นแบบและลูก ๆ สืบทอดมาจากตาราง เมื่อเวลาผ่านไปย้ายข้อมูลจากต้นแบบไปยังเด็ก แต่จะมีช่วงเวลาที่ข้อมูลบางอย่างอยู่ในตารางหลักและบางส่วนในเด็ก สร้างตารางหลักและตารางลูกใหม่ สร้างสำเนาของข้อมูลในตารางที่มีอยู่ในตารางลูก (ดังนั้นข้อมูลจะอยู่ในที่สองแห่ง) เมื่อตารางลูกมีข้อมูลล่าสุดให้เปลี่ยนส่วนแทรกทั้งหมดไปข้างหน้าเพื่อชี้ไปที่ตารางต้นแบบใหม่และลบตารางที่มีอยู่

1
โซลูชันฐานข้อมูลเก็บถาวร
ในการต่อเนื่องกับคำถามที่โพสต์โดยฉันบนมันเป็นความคิดที่ดีที่จะย้ายตารางปริมาณสูงและเข้าถึงอย่างสูงไปยังฐานข้อมูลแยกต่างหากหรือไม่ กำลังมองหาเทคนิค / โซลูชันที่แตกต่างกันสำหรับการเก็บฐานข้อมูลใน PostgreSQL วิธีแก้ปัญหาเล็กน้อยที่ฉันนึกได้คือ: การแบ่งตาราง คั่นพื้นที่ตารางและ / หรือสคีมา การย้ายระเบียน / ตารางที่เก็บถาวรไปยังฮาร์ดดิสก์อื่น คำแนะนำ / คำแนะนำ / คำแนะนำอื่น ๆ ยินดีต้อนรับและชื่นชมจริงๆ หมายเหตุ:เรากำลังเรียกใช้ PostgreSQL v9.1.3 บน CentOS5.2

2
ตาราง mysql ที่มีประสิทธิภาพ / การออกแบบดัชนีสำหรับ 35 ล้านแถว + ตารางโดยมี 200+ คอลัมน์ที่เกี่ยวข้อง (สองเท่า) การรวมกันใด ๆ ที่อาจมีการสอบถาม
ฉันกำลังมองหาคำแนะนำในการออกแบบตาราง / ดัชนีสำหรับสถานการณ์ต่อไปนี้: ฉันมีตารางขนาดใหญ่ (ข้อมูลประวัติราคาหุ้น InnoDB 35 ล้านแถวและเพิ่มขึ้น) ด้วยคีย์หลักผสม (assetid (int) วันที่ (วันที่) นอกเหนือจากข้อมูลการกำหนดราคาแล้วฉันมี 200 ค่าสองเท่าที่จำเป็นต้องสอดคล้องกับแต่ละระเบียน CREATE TABLE `mytable` ( `assetid` int(11) NOT NULL, `date` date NOT NULL, `close` double NOT NULL, `f1` double DEFAULT NULL, `f2` double DEFAULT NULL, `f3` double DEFAULT NULL, `f4` double DEFAULT NULL, ... skip …

4
SQL ออกแบบตารางขนาดใหญ่
ฉันมีคำถามทั่วไปเกี่ยวกับการออกแบบตาราง SQL Server 2008 ขณะนี้เรามีตารางที่มีมากกว่า 600GB และเติบโตที่ประมาณ 3GB ต่อวัน ตารางนี้มีตัวบ่งชี้ที่เหมาะสม แต่กำลังกลายเป็น hangup ที่สำคัญเมื่อเรียกใช้คิวรีและเนื่องจากขนาดของมัน คำถามคือฉันควรแบ่งตารางออกเป็นหลาย ๆ ตารางตามปีและเดือน (ซึ่งจะเหมาะสมกับแผนกอื่น ๆ ที่แยกชุดข้อมูลขนาดใหญ่ของพวกเขา) หรือเราควรใช้ประโยชน์จากการแบ่งพาร์ติชันที่สร้างไว้ใน SQL Server ดูเหมือนว่าการใช้การแบ่งพาร์ติชันจะต้องมีการเปลี่ยนแปลงรหัสน้อย จากสิ่งที่ฉันอ่านเมื่อทำการแบ่งพาร์ติชั่นคุณยังคงสืบค้นเฉพาะหนึ่งตารางและเซิร์ฟเวอร์จะจัดการวิธีรับข้อมูล หากเราไปหลายเส้นทางเราจะต้องจัดการกับการดึงข้อมูลจากหลายตาราง

3
ฉันสามารถย้ายแถวระหว่างพาร์ติชั่นโดยอัพเดตพาร์ติชั่นคีย์ได้ไหม?
ฉันคิดว่านี่เป็นคำถามที่ค่อนข้างง่าย แต่จริง ๆ แล้วฉันมีช่วงเวลาที่ยากลำบากในการหาคำตอบสำหรับเรื่องนี้ คำถาม: คุณสามารถย้ายแถวของข้อมูลภายในตารางที่แบ่งพาร์ติชันจากพาร์ติชันหนึ่งไปยังอีกพาร์ติชันโดยเพียงแค่การปรับปรุงคอลัมน์พาร์ติชันเพื่อที่จะข้ามขอบเขตพาร์ติชัน? ตัวอย่างเช่นถ้าฉันมีตารางที่มีพาร์ติชันคีย์: CREATE TABLE SampleTable ( SampleID INT PRIMARY KEY, SampleResults VARCHAR(100) NOT NULL, ) ด้วยฟังก์ชั่นพาร์ติชันที่จับคู่กับคีย์หลัก: CREATE PARTITION FUNCTION MyPartitionFunc (INT) AS RANGE LEFT FOR VALUES (10000, 20000); ฉันสามารถย้ายแถวจากพาร์ติชันแรกไปยังพาร์ติชันที่สามได้โดยเปลี่ยน SampleID จาก 1 เป็น 500,000 (พูด) 500,000 หรือไม่ หมายเหตุ: ฉันติดแท็กเป็นทั้งเซิร์ฟเวอร์ sql 2005 และ 2008 เนื่องจากทั้งสองสนับสนุนการแบ่งพาร์ติชัน พวกเขาจัดการกับมันแตกต่างกันหรือไม่?

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.