programing

mysql MEMORY ENGINE이 더 많은 데이터를 저장하도록 하려면 어떻게 해야 합니까?

lastmoon 2023. 8. 20. 12:27
반응형

mysql MEMORY ENGINE이 더 많은 데이터를 저장하도록 하려면 어떻게 해야 합니까?

INNODB에서 MEMORY ENGINE으로 테이블을 변경하고 싶습니다.

그래서 다음 명령을 입력했습니다.

alter table sns ENGINE=MEMORY;

그러면 MySQL이 표시됩니다.

ERROR 1114 (HY000): The table '#sql-738_19' is full

테이블의 데이터 크기는 1GB이고, 메모리는 8GB입니다.

my.cnf를 확인했는데 max_size 설정을 어디서 변경해야 하는지를 찾지 못했습니다.더 많은 데이터를 저장할 수 있어야 하지 않을까요?

테이블을 만들고 로드하는 방식을 조정해야 합니다.

CREATE TABLE sns_memory SELECT * FROM sns WHERE 1=2;
ALTER TABLE sns_memory ENGINE=MEMORY;
INSERT INTO sns_memory SELECT * FROM sns;
DROP TABLE sns;
ALTER TABLE sns_memory RENAME sns;

이렇게 하면 tmp_table_sizemax_size_table_size에 의해 부과된 제한을 피할 수 있습니다.

마찬가지로 두 가지 작업을 수행해야 합니다.

/etc/my.cnf에 추가합니다.

[mysqld]
tmp_table_size=2G
max_heap_table_size=2G

이것은 mysql 재시작을 다룰 것입니다.다시 시작하지 않고 지금 mysqld에서 이 값을 설정하려면 다음을 실행합니다.

SET GLOBAL tmp_table_size = 1024 * 1024 * 1024 * 2;
SET GLOBAL max_heap_table_size = 1024 * 1024 * 1024 * 2;

위의 변수를 확인하는 경우

SELECT @@max_heap_table_size;

또는

SHOW VARIABLES LIKE 'max_heap_table_size';

당신은 그들이 이후에도 변하지 않는 것처럼 보인다는 것을 알아차릴 수 있습니다.SET GLOBAL...진술들.이 설정은 서버에 대한 새 연결에만 적용되기 때문입니다.새 연결을 설정하면 값이 업데이트되거나 다음을 실행하여 세션 내에서 값을 변경할 수 있습니다.

SET tmp_table_size = 1024 * 1024 * 1024 * 2;
SET max_heap_table_size = 1024 * 1024 * 1024 * 2;

max_max_size_table_size를 찾고 있습니다.

메모리 테이블의 최대 크기는 생성 및 변경 시 설정되며 max_heap_table_size 값을 기반으로 합니다.

따라서 기존 메모리 테이블의 최대 크기를 늘리려는 경우 max_heap_table_size를 변경한 다음 동일한 스토리지 엔진으로 테이블을 변경하여 적용할 수 있습니다.

예:

# Raise max size to 4GB
SET max_heap_table_size = 1024 * 1024 * 1024 * 4;

# If already a memory table, the alter will not change anything.
# Only apply the new max size.
ALTER TABLE table_name ENGINE=MEMORY;

tmp_table_size에 대한 오해

tmp_table_size 변수는 내부 메모리 테이블의 최대 크기만 결정합니다.사용자 정의가 아닙니다.

MySQL 문서에 명시된 바와 같이:

내부 메모리 내 임시 테이블의 최대 크기입니다.이 변수는 사용자가 만든 MEMORY 테이블에는 적용되지 않습니다.

여전히 문제가 있는 경우 테이블이 차지하는 디스크 공간이 메모리 요구 사항보다 적은 경우가 많습니다.길이가 8인 VARCHAR(256)를 사용하면 Disk에서 8바이트가 사용되지만 스토리지는 동적 행을 지원하지 않으므로 모든 인스턴스에 대해 전체 256바이트의 메모리를 예약합니다.

증가하다max_heap_table_size.

언급URL : https://stackoverflow.com/questions/9842720/how-to-make-the-mysql-memory-engine-store-more-data

반응형