MySQL 데이터베이스를 메모리에서 완전히 실행하려면 어떻게 해야 합니까?
데이터베이스 서버가 메모리 데이터베이스 엔진을 지원하는 것을 알게 되었습니다.이미 InnoDB를 실행하고 있는 데이터베이스를 메모리에서 완전히 실행시켜 성능을 향상시키고 싶습니다.
그걸 어떻게 하는 거죠?PHPMyAdmin을 탐색했는데 "변경 엔진" 기능을 찾을 수 없습니다.
코멘트에 기재되어 있는 메모리 엔진 사용의 결과나, 여기에 기재되어 있는 것 외에, (트랜잭션의 안전성이나 잠금 문제 등) 검색으로 확인할 수 있는 몇개의 결과를 이해하고 있는 경우는, 다음과 같이 진행할 수 있습니다.
메모리 테이블은 InnoDB와 다르게 저장되므로 내보내기/가져오기 전략을 사용해야 합니다.먼저 다음을 사용하여 각 테이블을 파일에 개별적으로 덤프합니다.SELECT * FROM tablename INTO OUTFILE 'table_filename'
MEMORY 데이터베이스를 만들고 다음 구문을 사용하여 사용할 테이블을 다시 만듭니다.CREATE TABLE tablename (...) ENGINE = MEMORY;
그런 다음 다음을 사용하여 데이터를 가져올 수 있습니다.LOAD DATA INFILE 'table_filename' INTO TABLE tablename
각 테이블마다.
MySQL 데이터 디렉토리를 tmpfs에 배치하여 데이터베이스 쓰기 및 읽기 호출 속도를 높일 수도 있습니다.가장 효율적인 방법은 아닐 수 있지만 스토리지 엔진만 변경할 수는 없습니다.
MySQL 데이터 디렉토리에 대한 fstab 항목입니다.
none /opt/mysql/server-5.6/data tmpfs defaults,size=1000M,uid=999,gid=1000,mode=0700 0 0
innodb_commit_log_at_trx_commit=2 의 설정도 참조할 수 있습니다.이것으로 MySQL의 속도를 충분히 높일 수 있을 것입니다.
innodb_mysql_log_at_trx_commit은 mysql 디스크 플러시 동작을 변경합니다.2로 설정하면 버퍼가 초당 플러시됩니다.기본적으로는 삽입할 때마다 플러시가 발생하므로 입출력 부하가 증가합니다.
Memory Engine은 고객이 원하는 솔루션이 아닙니다.애초에 데이터베이스(ACID)에 갔던 모든 것을 잃게 됩니다.
다음은 더 나은 대안입니다.
Join을 사용하지 마세요.Google, Flickr, NetFlix 등 대규모 앱은 매우 적습니다.대규모의 Join에는 적합하지 않기 때문입니다.
LEFT [OUTER] JOIN은 서버가 MySQL Server에만 국한되지 않는 최적화를 수행할 수 있기 때문에 동등한 서브쿼리보다 빠를 수 있습니다.
- MySQL 매뉴얼
- 조회할 열에 인덱스가 있는지 확인하십시오.EXPLOY를 사용하여 사용 중인지 확인합니다.
- Query_Cache 및 메모리 공간을 사용하여 인덱스를 메모리에 저장하고 자주 찾는 내용을 저장합니다.
- 스키마를 정규화 해제하십시오(특히 단순 조인(barMap에서 fooId 가져오기).
마지막 포인트는 키입니다.예전에는 조인을 좋아했지만, 그 후에는 100M 이상의 행이 있는 몇 개의 테이블에서 조인을 실행해야 했습니다.안 돼.결합할 데이터를 대상 테이블에 삽입하고(너무 많지 않은 경우) 인덱스된 열을 쿼리하면 몇 ms 안에 쿼리를 얻을 수 있습니다.
도움이 됐으면 좋겠어요.
데이터베이스가 충분히 작을 경우(또는 충분한 메모리를 추가하면), 첫 번째 요청 후 데이터가 캐시되기 때문에 데이터베이스가 메모리에서 효과적으로 실행됩니다.
메모리 엔진을 사용하기 위해 데이터베이스 테이블 정의를 변경하는 것은 필요한 것보다 더 복잡할 수 있습니다.
를 사용하여 할 수 충분한 가 있는 MEMORY
엔진, 모든 것을 캐시할 수 있도록 innodb 설정을 조정할 수 있습니다.
"어떻게 하면 될까요?PHPMyAdmin을 탐색했는데 "엔진 변경" 기능을 찾을 수 없습니다.
이 에 대한 으로, '제발'을할 수 .ALTER TABLE tbl engine=InnoDB;
그러면 적절한 엔진으로 테이블을 재현할 수 있습니다.
메모리 스토리지 엔진 대신 MySQL Cluster를 고려할 수 있습니다.성능은 비슷하지만 내구성을 위해 디스크 백업 작업을 지원하는 것으로 알려져 있습니다.먹어본 적은 없지만 유망해 보인다(몇 년째 개발 중이다.
공식 MySQL 클러스터 문서는 여기에서 찾을 수 있습니다.
기타 의견:
Ramdisk - MySQL이 RAM 디스크로 사용하는 임시 드라이브를 설정하여 매우 쉽게 설정할 수 있습니다.
memcache - memcache 서버는 쉽게 설정할 수 있으며 쿼리 결과를 X시간 동안 저장할 수 있습니다.
언급URL : https://stackoverflow.com/questions/10692398/how-do-i-make-a-mysql-database-run-completely-in-memory
'programing' 카테고리의 다른 글
MySQL에 여러 개의 열 외부 키가 있습니까? (0) | 2023.01.24 |
---|---|
mysqldump에 의해 생성되는 방대한 라인 길이에 대처하는 방법 (0) | 2023.01.24 |
PHP file_get_contents() 및 요청 헤더 설정 (0) | 2023.01.14 |
Windows 7에서 Android Studio 설치가 실패하여 JDK를 찾을 수 없습니다. (0) | 2023.01.14 |
구성 요소 소품을 map에 전달할 수 있습니까?Getters vuex (0) | 2023.01.14 |