ฉันพบว่าอาจเป็นวิธีที่ดีกว่าในการแก้ปัญหานี้ในตารางที่แบ่งพาร์ติชัน ฉันต้องทิ้งพาร์ติชั่นเมื่อหลายปีก่อนและต้องเพิ่มพาร์ติชั่นใหม่สำหรับปี 2014 เกือบทุกพาร์ติชันรายงานข้อผิดพลาดนี้ดังนั้นก็เช่นกัน ความผิดพลาดที่น่ารังเกียจมาก
ดังนั้นในขณะที่ DROPPING เก่าและใช้ REORGANIZE ของพาร์ติชัน MAXVALUE (อันสุดท้าย) มันจะสร้างไฟล์ใหม่ที่โอเคฉันเลยได้รับคำเตือนน้อยลง ในเวลานั้นช่วยเพิ่มตัวนับลำดับการบันทึกดังนั้นฉันไม่จำเป็นต้องแทรกข้อมูลปลอม ฉันมีสิ่งนี้เกิดขึ้นบนเซิร์ฟเวอร์หลัก btw ...
ดังนั้นนี่คือ:
ALTER TABLE Events DROP PARTITION p1530 , p1535 , p1540 , p1545 ,
p1550, p1555 , p1560 , p1565 , p1570 , p1575 , p1580 , p1585 , p1590 ,
p1595 , p1600 , p1605 , p1610 , p1615 , p1620 , p1625 , p1630 , p1635 ,
p1640 , p1645 , p1650 , p1655 , p1660 , p1665 , p1670 , p1675 , p1680 ,
p1685 , p1690 , p1695 , p1700 , p1705 , p1710 , p1715 , p1720 , p1725 ,
p1730 , p1735 , p1740 , p1745 , p1750 , p1755 , p1760 , p1765 , p1770 ,
p1775 , p1780 , p1785 , p1790 , p1795 , p1800 , p1805 , p1810 , p1815 ,
p1820 , p1825 , p1830 , p1835 , p1840;
และนี่:
ALTER table Events REORGANIZE PARTITION p3000 INTO (
PARTITION p3500 VALUES LESS THAN (TO_DAYS('2013-01-01')),
PARTITION p3510 VALUES LESS THAN (TO_DAYS('2013-01-04')),
PARTITION p3520 VALUES LESS THAN (TO_DAYS('2013-01-07')),
PARTITION p3530 VALUES LESS THAN (TO_DAYS('2013-01-10'))
...
PARTITION p4740 VALUES LESS THAN (TO_DAYS('2014-01-08')),
PARTITION p9000 VALUES LESS THAN MAXVALUE)
ที่จะวางแต่ละพาร์ติชันในการเปลี่ยนแปลงได้อย่างมีประสิทธิภาพและสร้างใหม่ด้วยสำเนาชั่วคราวของเนื้อหาของสิ่งที่อยู่ในนั้น คุณสามารถทำสิ่งนี้ได้ต่อตารางหากคุณต้องการแอปพลิเคชันของฉันอนุญาตให้เกิดขึ้นดังนั้นไม่จำเป็นต้องกังวลเกี่ยวกับการสำรองข้อมูลที่ซิงค์เป็นต้น
ตอนนี้สำหรับส่วนที่เหลือของตารางตั้งแต่ฉันไม่ได้สัมผัสพาร์ทิชันทั้งหมดในกระบวนการบางส่วนจะถูกทิ้งให้อยู่กับคำเตือนลำดับล็อกสำหรับคนเหล่านั้นที่จะเสียแต่และครอบคลุมโดยการดำเนินการจัดระเบียบนี้ฉันอาจจะทำงานนี้:
ALTER TABLE Events REBUILD PARTITION p0, p1;
หรือว่า
ALTER TABLE Events OPTIMIZE PARTITION p0, p1;
ดังนั้นฉันจึงคิดว่าคุณสามารถทำสิ่งนี้กับตารางวานิลลาธรรมดาเพิ่มพาร์ทิชันชั่วคราวโดยแฮชและเอาออกในภายหลัง (หรือเก็บพวกเขาฉันสามารถแนะนำพาร์ทิชัน)
ฉันใช้ mariadb แต่ไม่ใช่ mysql (ดังนั้น XtraDB)
บางทีนี่อาจช่วยใครซักคน ฉันยังคงใช้งานได้ดีมาก การเปลี่ยน ENGINE ดูเหมือนว่าจะทำงานได้ดีดังนั้นฉันจึงนำมันกลับ / มาระหว่าง MyIsam กับพวกเขากลับไปที่ InnoDB
มันค่อนข้างสมเหตุสมผลถ้าคุณเปลี่ยน ENGINE ตารางจะหายไปจาก innodb ดังนั้นมันจะไม่เป็นปัญหาอีกต่อไป
ALTER TABLE Events ENGINE=MyISAM;
ALTER TABLE Events ENGINE=InnoDB;
ดูเหมือนว่าจะทำงานที่นี่ ฉันสามารถยืนยันบางสิ่งในตารางที่แบ่งพาร์ติชัน:
- ALTER TABLE xyz ENGINE = InnoDB ช้ามากไปยัง Aria (mariadb) เร็วเป็นสองเท่า แต่โดยทั่วไปแล้ววิธีที่ช้าในการเพิ่มเคาน์เตอร์ลำดับบันทึก
- แก้ไขตาราง xyz สร้างพาร์ทิชันทั้งหมดเป็นวิธีที่เร็วที่สุดในการ 'แก้ไข' ตารางและช่วยเพิ่มเคาน์เตอร์
- แก้ไขตาราง xyz วิเคราะห์พาร์ทิชันทั้งหมดช้าในการเปรียบเทียบกับอดีตและไม่ได้เขียนพาร์ทิชันที่ตรวจสอบว่าจะตกลง REBUILD ยืนยันการเขียนลงใน schema ของตารางชั่วคราว
ฉันใช้อันสุดท้ายกับหลาย ๆ โต๊ะ คำเตือนเกิดขึ้นเมื่อพยายามเปิดไฟล์และมีหนึ่งคำจำกัดความสำหรับทุกพาร์ติชันที่เปิดขึ้นพร้อมกับปัญหาการนับ เกือบจะกลิ้งผ่านเคาน์เตอร์วันนี้สำหรับตารางสุดท้าย ฉันคิดว่าเมื่อทุกอย่างถูกประมวลผลแล้วจะต้องล้างบันทึกไบนารี
ปรับปรุง : ฉันสามารถสรุปบางสิ่งตอนนี้ฉันจัดการเพื่อเรียงลำดับปัญหานี้ออก
- ความผิดพลาดของฉันเกิดจากการจัดระเบียบพาร์ติชันใหม่บนตารางในรูปแบบ Aria (MariaDB)
- (สำหรับฉัน) การสร้างพาร์ติชั่นใหม่นั้นทำได้ดีที่สุดและเร็วที่สุดเพื่อให้ตัวนับลำดับขึ้นมา การเปลี่ยนเครื่องยนต์ช้าและคุณต้องทำสองครั้งเพื่อส่งผลกระทบต่อ Innodb การเปลี่ยนเป็น innoDB ค่อนข้างช้าเมื่อเทียบกับ MyIsam หรือ Aria
- ฉันอัปเกรดเป็น MariaDB 5.3 และไม่ใช่ 5.5 (เดิมคือ 5.2) และใช้งานได้ดี ฉันคิดว่ามีปัญหามากเกินไปกับอาเรียพาร์ติชั่น 5.5 (และบั๊กที่ยืนยัน) เพื่อใช้ชุดค่าผสมนั้น
- ควรมีวิธีที่ดีกว่าในการรีเซ็ตตัวนับลำดับการบันทึก