MariaDB 10에서 대용량 인덱스를 활성화하려면 어떻게 해야 합니까?
Debian Jessie에서 MariaDB 서버 10.0.30을 설치하였고, 최대 키 길이를 늘리려고 합니다.AFIU 설정 파라미터에 따라 달라집니다.innodb_large_prefix
유효하게 되어 있습니다.의사들에 따르면, 그것은 또한,barracuda
파일 형식 및innodb_file_per_table
이러한 파라미터를 config로 설정하고 서버를 재기동하면 클라이언트에 표시되는 파라미터가 올바르게 설정되어 있는지 확인합니다.
> SHOW GLOBAL VARIABLES LIKE 'innodb_large%';
+---------------------+-------+
| Variable_name | Value |
+---------------------+-------+
| innodb_large_prefix | ON |
+---------------------+-------+
1 row in set (0.00 sec)
> SHOW GLOBAL VARIABLES LIKE 'innodb_file%';
+--------------------------+-----------+
| Variable_name | Value |
+--------------------------+-----------+
| innodb_file_format | Barracuda |
| innodb_file_format_check | OFF |
| innodb_file_format_max | Antelope |
| innodb_file_per_table | ON |
+--------------------------+-----------+
4 rows in set (0.00 sec)
> SHOW GLOBAL VARIABLES LIKE 'innodb_page%';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| innodb_page_size | 16384 |
+------------------+-------+
1 row in set (0.00 sec)
잘 모르겠어요, 왜요?innodb_file_format_max
설정되어 있다Antelope
단,innodb_file_format_check
꺼진 상태이므로 상관없습니다.사실, 제가 이걸 가지고 있어도Barracuda
, 그것은 차이를 만들지 않았다.
지금 다음과 같은 큰 인덱스를 가진 테이블을 생성하려고 하면:
CREATE TABLE `some_table` (
`some_tableID` int(10) unsigned NOT NULL AUTO_INCREMENT,
`column` varchar(750) COLLATE utf8mb4_estonian_ci NOT NULL DEFAULT '',
PRIMARY KEY (`some_tableID`),
KEY `column` (`column`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_estonian_ci;
에러가 표시된다.
ERROR 1709 (HY000): Index column size too large. The maximum column size is 767 bytes.
mysql 서버가 5.7.17인 Ubuntu 16.04에서는 모든 관련 설정이 동일하며(기본값), 큰 인덱스에 문제가 없습니다(utf8mb4의 경우 750*4 = 3000).
MariaDB 설정에 문제가 있습니까?
이 두 가지 설정뿐만 아니라...
SET GLOBAL innodb_file_format=Barracuda;
SET GLOBAL innodb_file_per_table=ON;
SET GLOBAL innodb_large_prefix=1;
logout & login (to get the global values);
ALTER TABLE tbl ROW_FORMAT=DYNAMIC; -- or COMPRESSED
아마도 당신이 필요한 것은 단지 더하기만 하면 될 것이다.ROW_FORMAT=...
고객님께CREATE TABLE
.
이러한 지침은 5.6.3 ~5.7.7에 필요합니다.5.7.7부터는 큰 필드를 처리할 수 있도록 시스템이 올바르게 기본 설정됩니다.
또는 "prefix" 인덱스를 사용할 수 있습니다.
INDEX(column(191))
(단, 프리픽스인덱스에는 여러 가지 결함이 있습니다).
"서버가 나중에 더 높은 테이블 형식을 만들 경우 innodb_file_format_max는 이 값으로 설정됩니다."는 설정은 문제가 되지 않음을 나타냅니다.
innodb_large_prefix
에만 적용되다COMPRESSED
그리고.DYNAMIC
행 형식을 지정합니다.
MariaDB 10.0 및 10.1에는 InnoDB 5.6이 있으며 기본적으로는 다음과 같은 테이블이 생성됩니다.ROW_FORMAT=Compact
(비록innodb_file_format
로 설정되어 있다.Barracuda
따라서 큰 프레픽스를 사용하려면 행 형식을 명시적으로 지정해야 합니다.MySQL 5.6도 마찬가지입니다.
기본적으로 InnoDB 5.7은 다음을 사용하여 테이블을 만듭니다.ROW_FORMAT=DYNAMIC
같은 이유로CREATE
의지하다innodb_large_prefix
는 추가 구문을 사용하지 않고 MySQL 5.7 및 MariaDB 10.2에서 작동합니다.
@Rick에서 제공한 절차 후:
SET GLOBAL innodb_file_format=Barracuda;
SET GLOBAL innodb_file_per_table=ON;
SET GLOBAL innodb_large_prefix=1;
-- logout & login (to get the global values);
마지막 단계를 로 변경했습니다.
SET GLOBAL innodb_default_row_format=DYNAMIC;
아직까지는 좋아.
세션에 대한 해결 방법은 여기에 있다고 생각합니다만, MySQL을 재기동하면, 이러한 설정은 동작하지 않는다고 생각합니다.
영구 솔루션은 My에 다음 코드를 입력해야 합니다.INI 파일-
## Innodb settings to bypass error of max size 737
innodb-file-format=barracuda
innodb-file-per-table=ON
innodb-large-prefix=ON
## Above 3 didnot work so i added below
innodb_default_row_format = 'DYNAMIC'
재작업이나 머리 긁힘을 줄이는 데 도움이 되길 바랍니다.
추가 중ROW_FORMAT=DYNAMIC
제 CREATE 쿼리가 효과가 있었어요.
당신의 경우는 다음과 같습니다.
CREATE TABLE `some_table` (
`some_tableID` int(10) unsigned NOT NULL AUTO_INCREMENT,
`column` varchar(750) COLLATE utf8mb4_estonian_ci NOT NULL DEFAULT '',
PRIMARY KEY (`some_tableID`),
KEY `column` (`column`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_estonian_ci ROW_FORMAT=DYNAMIC;
언급URL : https://stackoverflow.com/questions/43379717/how-to-enable-large-index-in-mariadb-10
'programing' 카테고리의 다른 글
pytest에서 콘솔에 인쇄하는 방법 (0) | 2023.01.12 |
---|---|
Java 8에서 문자열 목록으로 열거 값 가져오기 (0) | 2023.01.12 |
어레이에 개체를 추가하는 방법 (0) | 2023.01.12 |
JavaScript 약속 - 거부 vs. throw (0) | 2023.01.12 |
Java 프로젝트의 Vagrant: VM에서 컴파일할 것인가, 아니면 호스트에서 컴파일할 것인가? (0) | 2023.01.01 |