Loading...
MySQL 9.5 Reference Manual 9.5의 15.1.25 CREATE TABLESPACE Statement의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
1CREATE [UNDO] TABLESPACE tablespace_name 2 3 InnoDB and NDB: 4 [ADD DATAFILE 'file_name'] 5 [AUTOEXTEND_SIZE [=] value] 6 7 InnoDB only: 8 [FILE_BLOCK_SIZE = value] 9 [ENCRYPTION [=] {'Y' | 'N'}] 10 11 NDB only: 12 USE LOGFILE GROUP logfile_group 13 [EXTENT_SIZE [=] extent_size] 14 [INITIAL_SIZE [=] initial_size] 15 [MAX_SIZE [=] max_size] 16 [NODEGROUP [=] nodegroup_id] 17 [WAIT] 18 [COMMENT [=] 'string'] 19 20 InnoDB and NDB: 21 [ENGINE [=] engine_name] 22 23 Reserved for future use: 24 [ENGINE_ATTRIBUTE [=] 'string']
이 statement는 테이블스페이스를 생성하는 데 사용됩니다. 정확한 문법과 의미는 사용하는 스토리지 엔진에 따라 달라집니다. 표준 MySQL 릴리스에서는 항상 InnoDB 테이블스페이스입니다. MySQL NDB Cluster는 NDB 스토리지 엔진을 사용하는 테이블스페이스도 지원합니다.
CREATE TABLESPACE 문법은 일반 테이블스페이스 또는 언두 테이블스페이스를 생성하는 데 사용됩니다. 언두 테이블스페이스를 생성하려면 UNDO 키워드를 지정해야 합니다.
일반 테이블스페이스는 공유 테이블스페이스입니다. 여러 개의 테이블을 담을 수 있고, 모든 테이블 행 포맷을 지원합니다. 일반 테이블스페이스는 데이터 디렉터리를 기준으로 하거나 데이터 디렉터리와 독립된 위치에 생성할 수 있습니다.
InnoDB 일반 테이블스페이스를 생성한 후에는, CREATE TABLE tbl_name ... TABLESPACE [=] tablespace_name 또는
ALTER TABLE tbl_name TABLESPACE [=] tablespace_name를 사용하여 테이블을 테이블스페이스에 추가합니다. 자세한 내용은 Section 17.6.3.3, “General Tablespaces”를 참조하십시오.
언두 테이블스페이스는 언두 로그를 포함합니다. 언두 테이블스페이스는 전체 데이터 파일 경로를 지정하여 원하는 위치에 생성할 수 있습니다. 자세한 내용은 Section 17.6.3.4, “Undo Tablespaces”를 참조하십시오.
이 statement는 하나 이상의 데이터 파일을 포함할 수 있는 테이블스페이스를 생성하는 데 사용되며, NDB Cluster 디스크 데이터 테이블을 위한 저장 공간을 제공합니다( Section 25.6.11, “NDB Cluster Disk Data Tables” 참조). 이 statement를 사용하면 하나의 데이터 파일이 생성되어 테이블스페이스에 추가됩니다. 추가 데이터 파일은 ALTER TABLESPACE statement( Section 15.1.12, “ALTER TABLESPACE Statement” 참조)를 사용하여 테이블스페이스에 추가할 수 있습니다.
참고
모든 NDB Cluster 디스크 데이터 오브젝트는 동일한 네임스페이스를 공유합니다. 이는 각 디스크 데이터 오브젝트 가 (주어진 타입별이 아니라) 모두 고유한 이름을 가져야 함을 의미합니다. 예를 들어, 같은 이름을 가진 테이블스페이스와 로그 파일 그룹을 둘 다 가질 수 없으며, 같은 이름의 테이블스페이스와 데이터 파일을 가질 수도 없습니다.
하나 이상의 UNDO 로그 파일로 이루어진 로그 파일 그룹을 USE LOGFILE GROUP 절을 사용하여 생성할 테이블스페이스에 할당해야 합니다. logfile_group 은 CREATE LOGFILE GROUP( Section 15.1.20, “CREATE LOGFILE GROUP Statement” 참조)를 사용하여 생성된 기존 로그 파일 그룹이어야 합니다. 여러 테이블스페이스가 UNDO 로깅을 위해 동일한 로그 파일 그룹을 사용할 수 있습니다.
EXTENT_SIZE 또는 INITIAL_SIZE를 설정할 때, my.cnf에서 사용하는 것과 유사하게 숫자 뒤에 자릿수를 나타내는 한 글자 약어를 선택적으로 붙일 수 있습니다. 일반적으로 M(메가바이트) 또는 G(기가바이트) 중 하나입니다.
INITIAL_SIZE와 EXTENT_SIZE는 다음과 같이 반올림 규칙이 적용됩니다:
EXTENT_SIZE는 가장 가까운 32K의 정수 배수로 올림됩니다.
INITIAL_SIZE는 가장 가까운 32K의 정수 배수로 내림 되며, 이 결과는 (반올림 후) 가장 가까운 EXTENT_SIZE의 정수 배수로 올림됩니다.
참고
NDB는 데이터 노드 재시작 작업을 위해 테이블스페이스의 4%를 예약합니다. 이 예약된 공간은 데이터 저장에 사용할 수 없습니다.
위에서 설명한 반올림은 명시적으로 수행되며, 이러한 반올림이 수행되면 MySQL Server는 경고를 발생시킵니다. 반올림된 값은 NDB 커널에서 INFORMATION_SCHEMA.FILES 컬럼 값 계산 및 기타 용도로 사용됩니다. 그러나 예기치 않은 결과를 피하기 위해, 이 옵션을 지정할 때 항상 32K의 정수 배수를 사용하는 것이 좋습니다.
CREATE TABLESPACE를 ENGINE [=] NDB와 함께 사용하면, 각 Cluster 데이터 노드에 테이블스페이스와 연관된 데이터 파일이 생성됩니다. Information Schema의 FILES 테이블을 쿼리하여 데이터 파일이 생성되었는지 확인하고 관련 정보를 얻을 수 있습니다(이 절의 예제를 참조하십시오).
( Section 28.3.15, “The INFORMATION_SCHEMA FILES Table”도 참조하십시오.)
ADD DATAFILE: 테이블스페이스 데이터 파일의 이름을 정의합니다. 이 옵션은 NDB 테이블스페이스를 생성할 때 항상 필요합니다. InnoDB의 경우, 언두 테이블스페이스를 생성할 때만 필요합니다. file_name은 지정된 경로를 포함하여 작은따옴표 또는 큰따옴표로 둘러싸야 합니다. 파일 이름(확장자 제외)과 디렉터리 이름은 길이가 최소 1바이트 이상이어야 합니다. 길이가 0인 파일 이름과 디렉터리 이름은 지원되지 않습니다.InnoDB와 NDB가 데이터 파일을 처리하는 방식에는 상당한 차이가 있으므로, 다음 설명에서는 두 스토리지 엔진을 별도로 다룹니다.
InnoDB data files.
InnoDB 테이블스페이스는 이름에 .ibd 확장자를 포함해야 하는 단일 데이터 파일만 지원합니다.
InnoDB 일반 테이블스페이스 데이터 파일을 데이터 디렉터리 외부 위치에 두려면, 전체 경로 또는 데이터 디렉터리를 기준으로 하는 경로를 포함시킵니다. 언두 테이블스페이스의 경우에는 전체 경로만 허용됩니다. 경로를 지정하지 않으면, 일반 테이블스페이스는 데이터 디렉터리에 생성됩니다. 경로를 지정하지 않고 생성한 언두 테이블스페이스는 innodb_undo_directory 변수에 의해 정의된 디렉터리에 생성됩니다. innodb_undo_directory가 설정되어 있지 않으면, 언두 테이블스페이스는 데이터 디렉터리에 생성됩니다.
암묵적으로 생성되는 파일-퍼-테이블 테이블스페이스와의 충돌을 피하기 위해, 데이터 디렉터리의 하위 디렉터리에 InnoDB 일반 테이블스페이스를 생성하는 것은 지원되지 않습니다. 일반 테이블스페이스 또는 언두 테이블스페이스를 데이터 디렉터리 외부에 생성하려면, 해당 디렉터리가 존재해야 하며, 테이블스페이스 생성 이전에 InnoDB에 알려져 있어야 합니다. 디렉터리를 InnoDB에 알려지게 하려면, 해당 디렉터리를 innodb_directories 값에 추가하거나, 값이 innodb_directories 값에 추가되는 변수들 중 하나에 추가해야 합니다. innodb_directories는 읽기 전용 변수입니다. 설정을 변경하려면 서버를 재시작해야 합니다.
InnoDB 테이블스페이스를 생성할 때 ADD DATAFILE 절을 지정하지 않으면, 고유한 파일 이름을 가진 테이블스페이스 데이터 파일이 암묵적으로 생성됩니다. 고유한 파일 이름은 하이픈으로 구분된 16진수 숫자 다섯 그룹으로 형식화된 128비트 UUID입니다( aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee ). 스토리지 엔진에 필요한 경우 파일 확장자가 추가됩니다. InnoDB 일반 테이블스페이스 데이터 파일에는 .ibd 파일 확장자가 추가됩니다. 복제 환경에서는 복제 소스 서버에서 생성된 데이터 파일 이름이 레플리카에서 생성된 데이터 파일 이름과 동일하지 않습니다.
ADD DATAFILE 절은 InnoDB 테이블스페이스를 생성할 때 순환 디렉터리 참조를 허용하지 않습니다. 예를 들어, 다음 statement의 순환 디렉터리 참조(/../)는 허용되지 않습니다:
1CREATE TABLESPACE ts1 ADD DATAFILE ts1.ibd 'any_directory/../ts1.ibd';
Linux에서는 예외적으로, 이전 디렉터리가 심볼릭 링크인 경우 순환 디렉터리 참조가 허용됩니다. 예를 들어, 위 예제에서 any_directory 가 심볼릭 링크라면 해당 데이터 파일 경로는 허용됩니다. (여전히 데이터 파일 경로가 '../'로 시작하는 것은 허용됩니다.)
NDB data files.
NDB 테이블스페이스는 여러 개의 데이터 파일을 지원하며, 이 파일들은 어떤 유효한 파일 이름도 사용할 수 있습니다. 추가 데이터 파일은 ALTER TABLESPACE statement를 사용하여 NDB Cluster 테이블스페이스 생성 후에 추가할 수 있습니다.
NDB 테이블스페이스 데이터 파일은 기본적으로 데이터 노드의 파일 시스템 디렉터리, 즉 데이터 노드의 데이터 디렉터리( DataDir) 아래의 ndb_nodeid_fs/TS라는 디렉터리에 생성됩니다. 여기서 nodeid 는 데이터 노드의 NodeId입니다. 데이터 파일을 기본 위치가 아닌 다른 위치에 두려면, 절대 디렉터리 경로 또는 기본 위치를 기준으로 하는 경로를 포함하십시오. 지정한 디렉터리가 존재하지 않으면 NDB는 이를 생성하려고 시도합니다. 이때 데이터 노드 프로세스가 실행되는 시스템 사용자 계정에는 이를 생성할 수 있는 적절한 권한이 있어야 합니다.
참고
데이터 파일에 사용되는 경로를 결정할 때, NDB는 ~(틸드) 문자를 확장하지 않습니다.
같은 물리적 호스트에서 여러 개의 데이터 노드를 실행하는 경우, 다음 사항을 고려해야 합니다:
데이터 파일을 생성할 때 절대 경로를 지정할 수 없습니다.
각 데이터 노드에 별도의 데이터 디렉터리가 없는 경우, 데이터 노드 파일 시스템 디렉터리 외부에 테이블스페이스 데이터 파일을 생성할 수 없습니다.
각 데이터 노드에 자체 데이터 디렉터리가 있는 경우, 이 디렉터리 내 어디에든 데이터 파일을 생성할 수 있습니다.
각 데이터 노드에 자체 데이터 디렉터리가 있는 경우, 각 데이터 노드가 실행되는 호스트 파일 시스템에서 경로가 각기 고유한 위치로 해석되는 한, 상대 경로를 사용하여 노드의 데이터 디렉터리 외부에 데이터 파일을 생성하는 것도 가능할 수 있습니다.
FILE_BLOCK_SIZE: 이 옵션은 InnoDB 일반 테이블스페이스에 특화되어 있으며, NDB에서는 무시됩니다. 테이블스페이스 데이터 파일의 블록 크기를 정의합니다. 값은 바이트 또는 킬로바이트 단위로 지정할 수 있습니다. 예를 들어, 8킬로바이트 파일 블록 크기는 8192 또는 8K로 지정할 수 있습니다. 이 옵션을 지정하지 않으면, FILE_BLOCK_SIZE는 innodb_page_size 값으로 기본 설정됩니다. FILE_BLOCK_SIZE는 압축된 InnoDB 테이블(ROW_FORMAT=COMPRESSED)을 저장하는 데 테이블스페이스를 사용하려는 경우에 필요합니다. 이 경우, 테이블스페이스를 생성할 때 테이블스페이스 FILE_BLOCK_SIZE를 정의해야 합니다.
FILE_BLOCK_SIZE가 innodb_page_size 값과 같으면, 테이블스페이스는 비압축 행 포맷(COMPACT, REDUNDANT, DYNAMIC)을 가진 테이블만 포함할 수 있습니다. COMPRESSED 행 포맷을 가진 테이블은 비압축 테이블과 물리적 페이지 크기가 다릅니다. 따라서 압축 테이블은 비압축 테이블과 동일한 테이블스페이스에 공존할 수 없습니다.
일반 테이블스페이스가 압축 테이블을 포함하려면, FILE_BLOCK_SIZE를 지정해야 하며, FILE_BLOCK_SIZE 값은 innodb_page_size 값에 대해 유효한 압축 페이지 크기여야 합니다. 또한, 압축 테이블의 물리적 페이지 크기(KEY_BLOCK_SIZE)는 FILE_BLOCK_SIZE/1024와 같아야 합니다. 예를 들어, innodb_page_size=16K이고 FILE_BLOCK_SIZE=8K인 경우, 테이블의 KEY_BLOCK_SIZE는 8이어야 합니다. 자세한 내용은 Section 17.6.3.3, “General Tablespaces”를 참조하십시오.
USE LOGFILE GROUP: NDB에서 필수이며, 이전에 CREATE LOGFILE GROUP를 사용하여 생성한 로그 파일 그룹의 이름입니다. InnoDB에서는 지원되지 않으며, 오류로 실패합니다.
EXTENT_SIZE: 이 옵션은 NDB에 특화되어 있으며, InnoDB에서는 지원되지 않고 오류로 실패합니다. EXTENT_SIZE는 테이블스페이스에 속한 어떤 파일이든 사용하는 익스텐트 크기를 바이트 단위로 설정합니다. 기본 값은 1M입니다. 최소 크기는 32K이고, 이론적인 최대 값은 2G이지만, 실제 최대 값은 여러 요인에 따라 달라집니다. 대부분의 경우 익스텐트 크기를 변경해도 측정 가능한 성능 차이는 없으며, 가장 이례적인 상황을 제외하고는 기본 값을 사용하는 것이 좋습니다.
익스텐트는 디스크 공간 할당의 단위입니다. 하나의 익스텐트는 그 익스텐트가 담을 수 있는 최대한의 데이터로 채워진 후에만 다른 익스텐트가 사용됩니다. 이론적으로, 데이터 파일당 최대 65,535(64K) 익스텐트를 사용할 수 있습니다. 그러나 권장 최대값은 32,768(32K)입니다. 단일 데이터 파일의 권장 최대 크기는 32G, 즉 32K 익스텐트 × 익스텐트당 1MB입니다. 또한, 한 번 어떤 파티션에 할당된 익스텐트는 다른 파티션의 데이터를 저장하는 데 사용할 수 없습니다. 하나의 익스텐트에 여러 파티션의 데이터를 저장할 수 없습니다. 예를 들어, INITIAL_SIZE(다음 항목에서 설명)가 256MB이고 EXTENT_SIZE가 128M인 단일 데이터파일을 가진 테이블스페이스는 두 개의 익스텐트만 갖게 되므로, 최대 두 개의 서로 다른 디스크 데이터 테이블 파티션의 데이터만 저장할 수 있습니다.
특정 데이터 파일에 남은 익스텐트 수는 Information Schema의 FILES 테이블을 쿼리하여 확인할 수 있으며, 이를 통해 파일에 남은 여유 공간을 추정할 수 있습니다. 더 많은 논의와 예제는 Section 28.3.15, “The INFORMATION_SCHEMA FILES Table”를 참조하십시오.
INITIAL_SIZE: 이 옵션은 NDB에 특화되어 있으며, InnoDB에서는 지원되지 않고 오류로 실패합니다.INITIAL_SIZE 파라미터는 ADD DATATFILE을 사용하여 지정한 데이터 파일의 총 크기를 바이트 단위로 설정합니다. 이 파일이 생성된 후에는 크기를 변경할 수 없습니다. 그러나 ALTER TABLESPACE ... ADD DATAFILE를 사용하여 테이블스페이스에 더 많은 데이터 파일을 추가할 수 있습니다.
INITIAL_SIZE는 선택 사항이며, 기본 값은 134217728(128MB)입니다.
32비트 시스템에서 INITIAL_SIZE의 최대 지원 값은 4294967296(4GB)입니다.
AUTOEXTEND_SIZE: InnoDB에서 테이블스페이스가 가득 찼을 때 InnoDB가 테이블스페이스 크기를 확장하는 양을 정의합니다. 설정 값은 4MB의 배수여야 합니다. 기본 값은 0이며, 이 값은 테이블스페이스가 암묵적인 기본 동작에 따라 확장됨을 의미합니다. 자세한 내용은 Section 17.6.3.9, “Tablespace AUTOEXTEND_SIZE Configuration”를 참조하십시오.사용된 스토리지 엔진에 관계없이, MySQL NDB Cluster의 어떤 릴리스에서도 효과가 없습니다.
MAX_SIZE: 현재 MySQL에서는 무시되며, 향후 사용을 위해 예약된 옵션입니다. 스토리지 엔진에 관계없이, MySQL 또는 MySQL NDB Cluster의 어떤 릴리스에서도 효과가 없습니다.
NODEGROUP: 현재 MySQL에서는 무시되며, 향후 사용을 위해 예약된 옵션입니다. 스토리지 엔진에 관계없이, MySQL 또는 MySQL NDB Cluster의 어떤 릴리스에서도 효과가 없습니다.
WAIT: 현재 MySQL에서는 무시되며, 향후 사용을 위해 예약된 옵션입니다. 스토리지 엔진에 관계없이, MySQL 또는 MySQL NDB Cluster의 어떤 릴리스에서도 효과가 없습니다.
COMMENT: 현재 MySQL에서는 무시되며, 향후 사용을 위해 예약된 옵션입니다. 스토리지 엔진에 관계없이, MySQL 또는 MySQL NDB Cluster의 어떤 릴리스에서도 효과가 없습니다.
ENCRYPTION 절은 InnoDB 일반 테이블스페이스에 대해 페이지 수준 데이터 암호화를 활성화하거나 비활성화합니다.
ENCRYPTION 절이 지정되지 않은 경우, default_table_encryption 설정이 암호화 활성화 여부를 제어합니다. ENCRYPTION 절은 default_table_encryption 설정을 오버라이드합니다. 그러나 table_encryption_privilege_check 변수가 활성화되어 있는 경우, TABLE_ENCRYPTION_ADMIN 권한이 default_table_encryption 설정과 다른 ENCRYPTION 절 설정을 사용하기 위해 필요합니다.
암호화가 활성화된 테이블스페이스를 생성하기 전에 키링 플러그인이 설치되고 설정되어 있어야 합니다.
일반 테이블스페이스가 암호화되어 있으면, 해당 테이블스페이스에 있는 모든 테이블이 암호화됩니다. 마찬가지로, 암호화된 테이블스페이스에 생성된 테이블도 암호화됩니다.
자세한 내용은 Section 17.13, “InnoDB Data-at-Rest Encryption”을 참조하십시오.
ENGINE: 테이블스페이스를 사용하는 스토리지 엔진을 정의하며, engine_name 은 스토리지 엔진의 이름입니다. 현재 표준 MySQL 9.5 릴리스에서는 InnoDB 스토리지 엔진만 지원됩니다. MySQL NDB Cluster는 NDB 및 InnoDB 테이블스페이스를 모두 지원합니다. ENGINE 옵션이 지정되지 않으면 default_storage_engine 시스템 변수의 값이 사용됩니다.
ENGINE_ATTRIBUTE 옵션은 기본 스토리지 엔진용 테이블스페이스 속성을 지정하는 데 사용됩니다. 이 옵션은 향후 사용을 위해 예약되어 있습니다.
이 옵션에 할당하는 값은 유효한 JSON 도큐먼트 또는 빈 문자열('')을 포함하는 문자열 리터럴이어야 합니다. 잘못된 JSON은 거부됩니다.
1CREATE TABLESPACE ts1 ENGINE_ATTRIBUTE='{"key":"value"}';
ENGINE_ATTRIBUTE 값은 오류 없이 반복해서 지정할 수 있습니다. 이 경우 마지막으로 지정된 값이 사용됩니다.
ENGINE_ATTRIBUTE 값은 서버에서 검사하지 않으며, 테이블의 스토리지 엔진이 변경되더라도 삭제되지 않습니다.
MySQL 테이블스페이스 네이밍 규칙에 대해서는 Section 11.2, “Schema Object Names”를 참조하십시오. 이 규칙 외에도, 슬래시 문자(“/”)는 허용되지 않으며, 시스템용으로 예약된 프리픽스이므로 innodb_로 시작하는 이름도 사용할 수 없습니다.
임시 일반 테이블스페이스 생성은 지원되지 않습니다.
일반 테이블스페이스는 임시 테이블을 지원하지 않습니다.
TABLESPACE 옵션은 CREATE TABLE 또는
ALTER TABLE과 함께 사용하여, InnoDB 테이블 파티션 또는 서브파티션을 파일-퍼-테이블 테이블스페이스에 할당하는 데 사용할 수 있습니다. 모든 파티션은 동일한 스토리지 엔진에 속해야 합니다. 테이블 파티션을 공유 InnoDB 테이블스페이스에 할당하는 것은 지원되지 않습니다. 공유 테이블스페이스에는 InnoDB 시스템 테이블스페이스와 일반 테이블스페이스가 포함됩니다.
일반 테이블스페이스는 CREATE TABLE ... TABLESPACE를 사용하여 어떤 행 포맷의 테이블이라도 추가하는 것을 지원합니다. innodb_file_per_table를 활성화할 필요가 없습니다.
innodb_strict_mode는 일반 테이블스페이스에는 적용되지 않습니다. 테이블스페이스 관리 규칙은 innodb_strict_mode와 상관없이 엄격하게 적용됩니다. CREATE TABLESPACE 파라미터가 잘못되었거나 호환되지 않으면, innodb_strict_mode 설정과 상관없이 작업은 실패합니다. CREATE TABLE ... TABLESPACE 또는
ALTER TABLE ... TABLESPACE를 사용하여 테이블을 일반 테이블스페이스에 추가할 때에는, innodb_strict_mode는 무시되지만, statement는 innodb_strict_mode가 활성화된 것처럼 평가됩니다.
테이블스페이스를 제거하려면 DROP TABLESPACE를 사용하십시오. 테이블스페이스를 drop하기 전에, 해당 테이블스페이스의 모든 테이블을 DROP TABLE을 사용하여 drop해야 합니다. NDB Cluster 테이블스페이스를 drop하기 전에, 하나 이상의 ALTER TABLESPACE ... DROP DATATFILE statement를 사용하여 모든 데이터 파일도 제거해야 합니다. Section 25.6.11.1, “NDB Cluster Disk Data Objects”를 참조하십시오.
InnoDB 일반 테이블스페이스에 추가된 InnoDB 테이블의 모든 부분, 즉 인덱스와 BLOB 페이지를 포함한 모든 부분은 일반 테이블스페이스에 저장됩니다.
NDB 테이블이 테이블스페이스에 할당된 경우, 인덱스가 없는 컬럼만 디스크에 저장되며, 실제로 테이블스페이스 데이터 파일을 사용합니다. 모든 NDB 테이블의 인덱스와 인덱스된 컬럼은 항상 메모리에 유지됩니다.
시스템 테이블스페이스와 유사하게, 일반 테이블스페이스에 저장된 테이블을 truncate하거나 drop하면 일반 테이블스페이스 .ibd 데이터 파일 내에 내부적으로 여유 공간이 생성되며, 이 공간은 새 InnoDB 데이터에만 사용할 수 있습니다. 파일-퍼-테이블 테이블스페이스와 달리, 이 공간은 운영 체제에 반환되지 않습니다.
일반 테이블스페이스는 어떤 데이터베이스나 스키마에도 연관되지 않습니다.
ALTER TABLE ... DISCARD TABLESPACE 및
ALTER TABLE ...IMPORT TABLESPACE는 일반 테이블스페이스에 속한 테이블에 대해서는 지원되지 않습니다.
서버는 일반 테이블스페이스를 참조하는 DDL에 대해 테이블스페이스 수준 메타데이터 락킹을 사용합니다. 이에 비해, 파일-퍼-테이블 테이블스페이스를 참조하는 DDL에 대해서는 테이블 수준 메타데이터 락킹을 사용합니다.
생성되었거나 기존에 존재하는 테이블스페이스는 일반 테이블스페이스로 변경할 수 없습니다.
일반 테이블스페이스 이름과 파일-퍼-테이블 테이블스페이스 이름 사이에는 충돌이 없습니다. 파일-퍼-테이블 테이블스페이스 이름에 포함되는 “/” 문자는 일반 테이블스페이스 이름에서는 허용되지 않습니다.
mysqldump는 InnoDB CREATE TABLESPACE statement를 덤프하지 않습니다.
다음 예제는 일반 테이블스페이스를 생성하고, 서로 다른 행 포맷을 가진 압축되지 않은 세 개의 테이블을 추가하는 방법을 보여줍니다.
1mysql> CREATE TABLESPACE `ts1` ADD DATAFILE 'ts1.ibd' ENGINE=INNODB; 2 3mysql> CREATE TABLE t1 (c1 INT PRIMARY KEY) TABLESPACE ts1 ROW_FORMAT=REDUNDANT; 4 5mysql> CREATE TABLE t2 (c1 INT PRIMARY KEY) TABLESPACE ts1 ROW_FORMAT=COMPACT; 6 7mysql> CREATE TABLE t3 (c1 INT PRIMARY KEY) TABLESPACE ts1 ROW_FORMAT=DYNAMIC;
다음 예제는 일반 테이블스페이스를 생성하고, 압축 테이블을 추가하는 방법을 보여줍니다. 이 예제에서는 innodb_page_size 기본 값이 16K라고 가정합니다. 8192의 FILE_BLOCK_SIZE는 압축 테이블의 KEY_BLOCK_SIZE가 8이어야 함을 의미합니다.
1mysql> CREATE TABLESPACE `ts2` ADD DATAFILE 'ts2.ibd' FILE_BLOCK_SIZE = 8192 ENGINE=InnoDB; 2 3mysql> CREATE TABLE t4 (c1 INT PRIMARY KEY) TABLESPACE ts2 ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8;
다음 예제는 선택 사항인 ADD DATAFILE 절을 지정하지 않고 일반 테이블스페이스를 생성하는 방법을 보여줍니다:
1mysql> CREATE TABLESPACE `ts3` ENGINE=INNODB;
다음 예제는 언두 테이블스페이스를 생성하는 방법을 보여줍니다:
1mysql> CREATE UNDO TABLESPACE undo_003 ADD DATAFILE 'undo_003.ibu';
NDB Cluster 디스크 데이터 테이블스페이스 myts를 mydata-1.dat라는 데이터파일을 사용하여 생성하려 한다고 가정하겠습니다. NDB 테이블스페이스는 항상 하나 이상의 언두 로그 파일로 구성된 로그 파일 그룹 사용을 필요로 합니다. 이 예제에서는 먼저 myundo-1.dat라는 언두 로그 파일 하나를 포함하는 로그 파일 그룹 mylg를 생성합니다. 이를 위해 다음과 같이 CREATE LOGFILE GROUP statement를 사용합니다:
1mysql> CREATE LOGFILE GROUP myg1 2 -> ADD UNDOFILE 'myundo-1.dat' 3 -> ENGINE=NDB; 4Query OK, 0 rows affected (3.29 sec)
이제 다음 statement를 사용하여 앞에서 설명한 테이블스페이스를 생성할 수 있습니다:
1mysql> CREATE TABLESPACE myts 2 -> ADD DATAFILE 'mydata-1.dat' 3 -> USE LOGFILE GROUP mylg 4 -> ENGINE=NDB; 5Query OK, 0 rows affected (2.98 sec)
이제 CREATE TABLE statement에서 TABLESPACE 및 STORAGE DISK 옵션을 사용하여, 다음과 같이 디스크 데이터 테이블을 생성할 수 있습니다:
1mysql> CREATE TABLE mytable ( 2 -> id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, 3 -> lname VARCHAR(50) NOT NULL, 4 -> fname VARCHAR(50) NOT NULL, 5 -> dob DATE NOT NULL, 6 -> joined DATE NOT NULL, 7 -> INDEX(last_name, first_name) 8 -> ) 9 -> TABLESPACE myts STORAGE DISK 10 -> ENGINE=NDB; 11Query OK, 0 rows affected (1.41 sec)
mytable에서 id, lname, fname 컬럼이 모두 인덱스에 포함되어 있기 때문에, 실제로 디스크에 저장되는 것은 dob와 joined 컬럼뿐이라는 점에 유의해야 합니다.
앞에서 언급했듯이, CREATE TABLESPACE를 ENGINE [=] NDB와 함께 사용하면, 각 NDB Cluster 데이터 노드에 테이블스페이스와 그에 연관된 데이터 파일이 생성됩니다. 다음과 같이 Information Schema의 FILES 테이블을 쿼리하여 데이터 파일이 생성되었는지 확인하고 관련 정보를 얻을 수 있습니다:
1mysql> SELECT FILE_NAME, FILE_TYPE, LOGFILE_GROUP_NAME, STATUS, EXTRA 2 -> FROM INFORMATION_SCHEMA.FILES 3 -> WHERE TABLESPACE_NAME = 'myts'; 4 5+--------------+------------+--------------------+--------+----------------+ 6| file_name | file_type | logfile_group_name | status | extra | 7+--------------+------------+--------------------+--------+----------------+ 8| mydata-1.dat | DATAFILE | mylg | NORMAL | CLUSTER_NODE=5 | 9| mydata-1.dat | DATAFILE | mylg | NORMAL | CLUSTER_NODE=6 | 10| NULL | TABLESPACE | mylg | NORMAL | NULL | 11+--------------+------------+--------------------+--------+----------------+ 123 rows in set (0.01 sec)
추가 정보와 예제는 Section 25.6.11.1, “NDB Cluster Disk Data Objects”를 참조하십시오.
15.1.24 CREATE TABLE Statement
15.1.26 CREATE TRIGGER Statement