분할 된 테이블에서 작동하는이 문제를 해결하는 더 멋진 방법이 있다는 것을 알았습니다. 몇 년 전부터 파티션을 삭제해야했고 2014 년에 파티션을 추가해야했습니다. 거의 모든 파티션이이 오류와 이전 파티션을보고합니다. 매우 심한 충돌.
따라서 오래된 값을 버리고 MAXVALUE 파티션 (마지막 파티션)의 REORGANIZE를 사용하는 동안 괜찮은 새 파일이 생성되므로 경고 메시지가 점점 줄어 듭니다. 그 동안 로그 시퀀스 카운터를 늘리는 데 도움이되므로 가짜 데이터를 삽입 할 필요가 없습니다. 마스터 서버 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;
그래서, 나는 생각했습니다. 일반 바닐라 테이블을 사용 하여이 작업을 수행 할 수 있습니다. 해시로 파티션을 임시로 추가 한 다음 나중에 제거하십시오 (또는 파티션을 유지하는 것이 좋습니다).
그러나 mysql이 아닌 mariadb를 사용하고 있습니다 (XtraDB).
아마도 이것은 누군가를 도울 것입니다. 나는 지금까지 여전히 실행 중입니다. ENGINE을 변경하면 작업이 수행되는 것처럼 보이므로 MyIsam과 InnoDB간에 다시 가져옵니다.
ENGINE을 변경하면 테이블이 innodb에서 사라 지므로 더 이상 문제가되지 않습니다.
ALTER TABLE Events ENGINE=MyISAM;
ALTER TABLE Events ENGINE=InnoDB;
여기서 작동하는 것 같습니다. 파티션 된 테이블에서 몇 가지 사항을 확인할 수 있습니다.
- ALTER TABLE xyz ENGINE = InnoDB는 Aria (mariadb)보다 두 배 빠르지 만 일반적으로 로그 시퀀스 카운터를 증가시키는 느린 방법
- ALTER TABLE xyz REBUILD PARTITION ALL은 테이블을 '고정'하여 카운터를 증가시키는 가장 빠른 방법입니다.
- ALTER TABLE xyz ANALYZE PARTITION ALL은 이전 버전과 느리게 비교되며 확인 된 파티션을 다시 쓰지 않습니다. REBUILD는 임시 테이블 스키마를 다시 작성합니다.
나는 여러 테이블에서 마지막 것들을 사용했습니다. 경고는 파일을 열려고 할 때 발생하며 모든 파티션 정의마다 카운터 문제로 열립니다. 오늘 마지막 테이블에 대한 카운터를 거의 롤오버했습니다. 일단 처리가 완료되면 바이너리 로그를 플러시해야한다고 생각합니다.
업데이트 : 이제이 문제를 해결하기 위해 몇 가지 결론을 내릴 수 있습니다.
- Aria 형식 (MariaDB)으로 테이블의 파티션을 재구성하여 충돌이 발생했습니다.
- (나를 위해) 파티션을 재구성하는 것이 시퀀스 카운터를 얻는 데 가장 빠르고 효과적이었습니다. 엔진 변경은 느리고 innodb에 영향을 주려면 두 번 수행해야합니다. innoDB 로의 변경은 MyIsam 또는 Aria에 비해 상당히 느립니다.
- 5.5가 아닌 MariaDB 5.3으로 업그레이드했으며 (was : 5.2) 정상적으로 작동합니다. 아리아, 5.5의 파티션 (및 확인 된 버그)에 그 조합을 사용하는 데 너무 많은 문제가 있다고 생각합니다.
- 로그 시퀀스 카운터를 재설정하는 더 좋은 방법이 있어야합니다.