거대한 데이터베이스가 있고 새 열을 삽입하는 데 너무 오래 걸립니다. 어쨌든 속도를 높이려면?너무 오래 걸리는 MYSQL에 새로운 열 삽입
답변
불행히도, 당신이 할 수있는 일은별로 없을 것입니다. 새로운 컬럼을 삽입 할 때, MySQL은 테이블의 복사본을 만들고 거기에 새로운 데이터를 삽입합니다. 당신 은 더 빨리이 내 경험되지 않았습니다
CREATE TABLE new_table LIKE old_table;
ALTER TABLE new_table ADD COLUMN (column definition);
INSERT INTO new_table(old columns) SELECT * FROM old_table;
RENAME table old_table TO tmp, new_table TO old_table;
DROP TABLE tmp;
을 찾을 수 있지만, 나는 다른 사람들이 성공을 거두었습니다 들었습니다. 또한 삽입 전에 나중에 new_table
에서 색인을 사용하지 않도록 설정하고 나중에 다시 사용하도록 설정할 수 있습니다. 이 경우 전환하는 동안 old_table
에 삽입 될 수있는 데이터가 손실되지 않도록주의해야합니다.
변경 중에 사용자에게 영향을주는 경우 pt-online-schema-change
을 확인하면 ALTER TABLE
문을 실행하여 수정 된 테이블을 계속 사용할 수 있습니다. (이 그러나 프로세스의 속도를하지 않습니다.)이 더 빠르게 할 수있는 네 가지 주요 가지가 있습니다
시간과 대기 시간은 일을하지 않았다. 마지막으로 테이블의 복사본을 만들고, 새로운 열을 추가하고, 인덱스를 제거하고, jiffy –
+1에 레코드를 복사했습니다. 내가 제안 할 두 가지 작은 변화가 있지만 나를 위해 일했다. RENAME new_table TO tmp, old_table TO new_table; 는 이어야합니다. RENAME 테이블 new_table TO old_table, old_table TO tmp; – pinaki
@pinaki 감사합니다. 그게 분명 내가 의미했던 것입니다. –
마이클의 해결책은 다소 속도가 빨라질 수 있지만 데이터베이스를 살펴보고 큰 테이블을 작은 테이블로 분해해야합니다. 이것을보십시오 : link. 데이터베이스 테이블을 표준화하면 장래에 많은 시간을 절약 할 수 있습니다.
우리는 리눅스에서 MYISAM을 사용하고 있습니다. 나는 테이블에 새로운 타입을 삽입하는 것을 의미합니다. –
이것은 질문에 대답하지 않기 때문에 주석으로 게시해야합니다. –
@coder - 내 데이터베이스가 정규화되지 않았다고 생각하는 이유는 무엇입니까? –
일반적으로 새 줄 삽입은 많은 색인이 있다는 것을 의미하므로 색인을 다시 고려해 볼 것을 제안합니다.
예, 색인을 제거하고 새 열을 추가 한 다음 다시 색인을 생성 할 수 있습니다. 그건 내가 생각보다 빨리 –
:
하는 경우에 매우 세분화 될 수있는 원래의 테이블을 innodb_file_per_table 사용이 파일 시스템이므로 먼저 조각 모음을 시도 할 수 있습니다.
버퍼 풀을 합리적인 수준으로 크게 설정하여 더 많은 데이터, 특히 보조 인덱스가 적합합니다.
innodb_io_capacity를 평소보다 높게 설정하면 삽입 버퍼 병합과 수정 된 페이지의 플러시가보다 빠르게 수행됩니다. InnoDB 플러그인이있는 MySQL 5.1 또는 5.5 이상이 필요합니다.
MySQL 5.1 with InnoDB 플러그인과 MySQL 5.5 이상은 빠른 변경 테이블을 지원합니다. 훨씬 더 빠르게 만드는 것 중 하나는 외래 키가 아닌 고유하지 않은 인덱스를 추가하거나 다시 작성하는 것입니다. 따라서 다음을 수행 할 수 있습니다.
A. ALTER TABLE FN에없는 고유하지 않은 색인을 삭제하십시오.
B. ALTER TABLE 비 고유 FK 색인을 다시 추가하십시오.
a :
다음과 같은 이점이 있습니다. 버퍼 풀은 고유하거나 FK에있는 것 중 일부만 보유해야하기 때문에 단계 A에서 버퍼 풀을 덜 사용합니다. 인덱스는이 단계에서 무작위로 업데이트되므로 버퍼 풀에 완전히 들어 가지 않으면 성능이 훨씬 저하됩니다. 재건의 기회가 더 빨리 유지됩니다.
b. 빠른 변경 테이블은 항목을 정렬 한 다음 색인을 작성하여 색인을 다시 작성합니다.이것은 더 빠르며 더 높은 페이지 채우기 비율로 색인을 생성하기 때문에 시작하기가 더 빨라지고 빠릅니다.
가장 큰 단점은 두 단계로 진행되고 첫 번째 단점 이후에 좋은 성능을 위해 필요한 색인이없는 것입니다. 이것이 문제인 경우 새로운 테이블 접근법에 복사본을 시도해 볼 수 있습니다. 처음에는 새 테이블에 대해 고유 한 FK 인덱스를 사용하고 나중에는 고유하지 않은 테이블을 추가합니다.
MySQL 5.6에만 해당하지만 기능 요청이 http://bugs.mysql.com/bug.php?id=59214이면 삽입 버퍼 변경 내용이 디스크로 플러시되는 속도가 빨라지고 버퍼 풀에서 차지할 수있는 공간의 양이 제한됩니다. 이는 큰 작업에 대한 성능 제한 일 수 있습니다. 인서트 버퍼는 2 차 색인 페이지의 변경 사항을 캐시하는 데 사용됩니다.
우리는이 때로는 여전히 실망스럽게도 느린 것을 알고 진정한 온라인 테이블을 변경한다는 것은 매우 매우 바람직하다
이 내 개인적인 의견입니다. 오라클의 공식적인 견해에 대해서는 오라클 홍보 담당자에게 문의하십시오.
MySQL 수석 수석 기술 지원 엔지니어 James Day
- 1. 너무 오래 걸리는 그룹 .... 마침내 타임 아웃?
- 2. 그래프가 로그보다 너무 오래 걸리는 이유는 무엇입니까?
- 3. PHP가 너무 오래 걸리는 XML로드 중
- 4. MySQL의 쿼리가 너무 오래 걸리는 - webfaction
- 5. HttpWebResponse로 페이지를로드하는 데 너무 오래 걸리는 경우
- 6. 편집 게시물 페이지를로드하는 데 너무 오래 걸리는 이유는 무엇입니까?
- 7. Android AVD가 시작하는 데 너무 오래 걸리는 이유는 무엇입니까?
- 8. mysql에서 열의 이름을 바꾸는 데 너무 오래 걸리는 이유는 무엇입니까?
- 9. Eclipse가 Maven 종속성을 업데이트하는 데 너무 오래 걸리는 이유는 무엇입니까?
- 10. Android SQLite 쿼리가 너무 오래 걸리는 경우 충돌이 발생합니까?
- 11. Visual Studio가 파일을 삭제하는 데 너무 오래 걸리는 이유
- 12. 번들 설치 gqucutter에서 응답하기에 너무 오래 걸리는 Jquery-rails
- 13. CompletionService를 사용하여 너무 오래 걸리는 작업을 취소하는 방법
- 14. Perl에서 "\ n"을 인쇄하는 데 너무 오래 걸리는 이유는 무엇입니까?
- 15. 렌더링보기가 너무 오래 걸림
- 16. mysql에 삽입
- 17. MySQL에 삽입
- 18. 사이트가 너무 오래 지났습니까?
- 19. NUnit : 너무 오래 걸릴 경우 테스트를 중단하십시오.
- 20. CPIO 명령을 완료하는 데 너무 오래 걸립니다.
- 21. UI 프로그래밍에 시간이 오래 걸리는 이유는 무엇입니까?
- 22. 페이지 게시물의 시간이 오래 걸리는 이유는 무엇입니까?
- 23. 부모 프로세스보다 오래 걸리는 프로세스를 만드는 방법
- 24. Mantaining dropdown .. 스크립트가 너무 오래?
- 25. WCF 스트리밍이 너무 오래 걸립니다.
- 26. SQL 삭제 시간이 너무 오래 걸림
- 27. 사용자 계정을 mySQL에 삽입
- 28. msql에서 선택하고 mysql에 삽입
- 29. mysql에 너무 많은 열이 있습니까?
- 30. 도달 가능성의 SCNetworkReachabilityGetFlags 반환하기에 너무 오래 걸립니다.
엄청난 양의 데이터 구조를 수정하고 있습니까? 시간이 걸려요. –