Ich fand heraus, dass es vielleicht eine coolere Möglichkeit gibt, dieses Problem bei partitionierten Tabellen zu lösen. Ich musste Partitionen von vor einigen Jahren löschen und einige für 2014 hinzufügen. Fast alle Partitionen melden diesen Fehler, also auch alte. Sehr böser Absturz.
Wenn Sie also die alte Partition DROPPEN und REORGANIZE der MAXVALUE-Partition (die letzte) verwenden, werden neue Dateien erstellt, die in Ordnung sind, sodass ich immer weniger Warnungen erhalte. In der Zwischenzeit hilft es, den Protokollsequenzzähler zu erhöhen, sodass ich keine falschen Daten einfügen muss. Ich habe das passiert auf einem Master-Server übrigens ...
Also das:
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;
Und das:
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)
Auf diese Weise wird jede Partition in der Änderung gelöscht und mit einer temporären Kopie des Inhalts der vorhandenen Partition neu erstellt. Sie können dies pro Tabelle tun, wenn Sie möchten. Meine Anwendung lässt dies zu, sodass Sie sich nicht um synchronisierte Sicherungen usw. kümmern müssen.
Nun zum Rest der Tabelle, da ich nicht alle Partitionen in dem Prozess berührt habe, werden einige mit der Protokollsequenz-Warnung belassen, für diejenigen, die defekt sind , aber von dieser Reorganisationsaktion abgedeckt werden, werde ich wahrscheinlich Folgendes ausführen:
ALTER TABLE Events REBUILD PARTITION p0, p1;
oder das
ALTER TABLE Events OPTIMIZE PARTITION p0, p1;
Das brachte mich zum Nachdenken: Sie könnten dies mit einfachen Vanilletabellen tun, temporär Partitionen per Hash hinzufügen und später entfernen (oder behalten, ich kann Partitionen dringend empfehlen).
Ich benutze Mariadb jedoch nicht MySQL (also XtraDB)
Vielleicht hilft das jemandem. Ich leite es immer noch, soweit so gut. Das Ändern von ENGINE scheint ebenfalls zu funktionieren, daher bringe ich es zwischen MyIsam und ihnen zurück zu InnoDB.
Es ist ziemlich logisch, wenn Sie ENGINE ändern, verschwindet die Tabelle aus innodb, sodass dies kein Problem mehr darstellt.
ALTER TABLE Events ENGINE=MyISAM;
ALTER TABLE Events ENGINE=InnoDB;
es scheint hier zu funktionieren. Ich kann ein paar Dinge auf partitionierten Tabellen bestätigen:
- ALTER TABLE xyz ENGINE = InnoDB ist sehr langsam, Aria (Mariadb) doppelt so schnell, aber im Allgemeinen ein langsamer Weg, um den Protokollsequenzzähler zu erhöhen
- ALTER TABLE xyz REBUILD PARTITION ALL ist der schnellste Weg, um die Tabellen zu reparieren und den Zähler zu erhöhen
- ALTER TABLE xyz ANALYZE PARTITION ALL ist langsam im Vergleich zu früheren Partitionen und schreibt Partitionen, die sich als in Ordnung herausstellen, nicht neu. REBUILD sichert ein Umschreiben in ein temporäres Tabellenschema zu.
Die letzten habe ich an mehreren Tischen verwendet. Die Warnungen treten auf, wenn versucht wird, die Dateien zu öffnen, und es gibt eine für jede Partitionsdefinition, die mit Leistungsindikatorproblemen geöffnet wird. Fast über die Ladentheke gerollt heute für die letzten Tische. Ich denke, wenn alles einmal abgearbeitet ist, muss man die Binärlogs leeren.
Update : Ich kann ein paar Dinge abschließen, jetzt habe ich es geschafft, dieses Problem zu lösen.
- Mein Absturz wurde durch das Reorganisieren von Partitionen in einer Tabelle im Aria-Format (MariaDB) verursacht.
- (für mich) hat es am besten und schnellsten geklappt, einen Neustart der Partitionen durchzuführen, um den Sequenzzähler auf den neuesten Stand zu bringen. Das Ändern des Motors ist langsam und Sie müssen es zweimal tun, um innodb zu beeinflussen. Änderungen an innoDB sind im Vergleich zu MyIsam oder Aria recht langsam.
- Ich habe ein Upgrade auf MariaDB 5.3 und nicht auf 5.5 (bisher: 5.2) durchgeführt und es funktioniert einwandfrei. Ich denke, es gibt viel zu viele Probleme mit Aria, Partitionen in 5.5 (und bestätigten Fehlern), um diese Kombination zu verwenden.
- Es sollte wirklich eine bessere Möglichkeit geben, den Protokollsequenzzähler zurückzusetzen.