테이블스페이스란 무엇이며 왜 그것이 사용됩니까?
문제를 조사하는 동안 다음 오류가 발생했습니다.
30503 [ERROR] InnoDB: 이전에 연 테이블스페이스를 열려고 했습니다.이전 테이블스페이스 mysql/innodb_index_stats는 filepath: ./mysql/innodb_index_stats.ibd에서 공백 ID: 2를 사용합니다.파일 경로: ./Mydb/be_command_log.ibd에서 공백 ID: 2를 사용하는 테이블스페이스 Mydb/be_command_log를 열 수 없습니다.
이 문제에 대해 조금 읽고 나서, 저는 이것이 MySQL의 알려진 문제라는 것을 알게 되었습니다.
하지만 제 문제는 테이블스페이스가 실제로 어떻게 작동하는지 잘 모른다는 것입니다.그것들은 어떻게 유용합니까?나는 이 정의를 읽었지만 모든 정보를 제공하지는 않습니다.
테이블스페이스란 무엇이며 테이블스페이스는 어떻게 작동하는지에 대한 자세한 정보를 공유할 수 있습니까?
하나 이상의 InnoDB 테이블 및 관련 인덱스에 대한 데이터를 보관할 수 있는 데이터 파일입니다.
테이블별 정보 클럽 구성을 기반으로 다양한 유형의 테이블스페이스가 있습니다.이거는.
시스템 테이블 공간 b.테이블스페이스당 파일 수 c.일반 테이블스페이스
시스템 테이블스페이스는 다음을 포함합니다.
- InnoDB 데이터 사전.
- 이중 쓰기 버퍼.
- 변경 버퍼
- 로그 실행 취소.
이것 외에도, 그것은 또한 포함합니다.
- 테이블 &
- 인덱스 데이터
은 "연된파은일"입니다..idbdata1
MySQL 5.6 이상에서 기본적으로 활성화된 innodb_file_per_table 옵션을 사용하면 테이블마다 별도의 데이터 파일을 사용하여 테이블을 파일별 테이블스페이스로 만들 수 있습니다.innodb_file_per_table 옵션을 사용하면 테이블 압축 및 전송 가능한 테이블스페이스와 같은 다른 MySQL 기능을 사용할 수 있습니다.
은 "연된파은일"입니다..idbd
InnoDB는 MySQL 5.7.6에 일반 테이블스페이스를 도입했습니다.일반 테이블스페이스는 CREATE TABLESPACE 구문을 사용하여 만든 공유 테이블스페이스입니다.MySQL 데이터 디렉토리 외부에 생성할 수 있으며 여러 테이블을 저장할 수 있으며 모든 행 형식의 테이블을 지원합니다.
@BhupeshPant가 제공하는 우수한 답변에 추가
InnoDB의 저장소는 테이블스페이스로 나뉩니다.테이블스페이스는 여러 데이터 파일(개체)과 연결된 논리 구조입니다.각 테이블스페이스에는 페이지(블록), 범위 및 세그먼트가 포함됩니다.
페이지 - InnoDB를 위한 최소 데이터로, 블록이라고도 합니다.페이지는 행 크기에 따라 하나 이상의 행을 포함할 수 있습니다.
일반적으로 모든 테이블에는 하나의 데이터 파일과 연결된 자체 테이블스페이스가 있습니다.
다음 명령은 테이블스페이스의 전체 목록과 해당 데이터 파일을 표시합니다.
SELECT TABLESPACE_NAME, FILE_NAME FROM information_schema.FILES;
더 하기 위해 .database1
CREATE DATABASE database1;
USE database1;
샘플 표를 .table1
-
CREATE TABLE table1 (
-> col1 INT
-> );
이제 해당 테이블스페이스와 데이터 파일도 생성되었음을 알 수 있습니다.
SELECT TABLESPACE_NAME, FILE_NAME FROM information_schema.FILES;
+--------------------------+--------------------------+
| TABLESPACE_NAME | FILE_NAME |
+--------------------------+--------------------------+
|database1/table1 | ./database1/table1.ibd |
+--------------------------+--------------------------+
, 여, 서기..ibd
file을 의미합니다.
이제 샘플 를 하나 더 .table2
-
CREATE TABLE table2 (
-> col1 INT
-> );
해당 테이블스페이스와 데이터 파일이 생성되었음을 다시 확인할 수 있습니다.
SELECT TABLESPACE_NAME, FILE_NAME FROM information_schema.FILES;
+---------------------------+--------------------------+
| TABLESPACE_NAME | FILE_NAME |
+---------------------------+--------------------------+
| database1/table1 | ./database1/table1.ibd |
| database1/table2 | ./database1/table2.ibd |
+---------------------------+--------------------------+
여기서 시스템은 테이블스페이스의 기본 이름을 작성합니다.이러한 시스템에서 생성된 테이블스페이스를 단일 테이블스페이스라고 합니다.
단일 테이블 테이블스페이스는 다음과 같은 경우에만 시스템에서 생성됩니다.innodb_file_per_table
이라ON
다음을 통해 확인할 수 있습니다.
SHOW VARIABLES LIKE "innodb_file_per_table";
+-----------------------+-------+
| Variable_name | Value |
+-----------------------+-------+
| innodb_file_per_table | ON |
+-----------------------+-------+
기본적으로 값은 ON입니다.다음을 통해 끌 수 있습니다.
SET GLOBAL innodb_file_per_table = OFF;
SHOW VARIABLES LIKE "innodb_file_per_table";
+-----------------------+-------+
| Variable_name | Value |
+-----------------------+-------+
| innodb_file_per_table | OFF |
+-----------------------+-------+
값을 해제하면 단일 테이블 테이블스페이스가 작성되지 않습니다.
이를 입증하기 위해 다시 샘플 테이블을 만듭니다.
CREATE TABLE table10 (
-> col1 INT
-> );
SELECT TABLESPACE_NAME, FILE_NAME FROM information_schema.FILES;
+---------------------------+--------------------------+
| TABLESPACE_NAME | FILE_NAME |
+---------------------------+--------------------------+
| database1/table1 | ./database1/table1.ibd |
| database1/table2 | ./database1/table2.ibd |
+---------------------------+--------------------------+
따라서 -라는 이름의 테이블스페이스가 없음을 알 수 있습니다.database1/table10
은 이한경테은다위음저치장됩다니에이에 됩니다.innodb_system
테이블 공간;
SELECT TABLESPACE_NAME, FILE_NAME FROM information_schema.FILES WHERE FILE_NAME LIKE "%ibdata1";
+-----------------+-----------+
| TABLESPACE_NAME | FILE_NAME |
+-----------------+-----------+
| innodb_system | ./ibdata1 |
+-----------------+-----------+
그러나 이 방법은 시스템 테이블 공간에 더 많은 부하를 주어 성능 관련 문제를 야기하기 때문에 좋은 방법은 아닙니다.
시스템에서 생성된 테이블스페이스의 경우 테이블스페이스를 삭제하면 테이블스페이스도 자동으로 삭제됩니다.
테이블스페이스에 대한 사용자 정의 이름을 만들 수 있는 일반 테이블스페이스라는 다른 유형의 테이블스페이스가 있습니다.
그러기 위해서는 다음과 같은 명령을 내려야 합니다.
CREATE TABLESPACE tablespace1 ADD DATAFILE '/var/lib/mysql/tablespace1.ibd' engine = Innodb;
테이블스페이스와 해당 데이터 파일이 생성된 것을 확인할 수 있습니다.
SELECT TABLESPACE_NAME, FILE_NAME FROM information_schema.FILES;
+---------------------------+--------------------------------+
| TABLESPACE_NAME | FILE_NAME |
+---------------------------+--------------------------------+
| database1/table1 | ./database1/table1.ibd |
| database1/table2 | ./database1/table2.ibd |
| tablespace1 | /var/lib/mysql/tablespace1.ibd |
+---------------------------+--------------------------------+
서 모든 는 Mysql 여기에모테이든작 에 됩니다.datadir
은 기적으로입니다./var/lib/mysql/
그datadir
과 같은 명령어 - 다명확값은있다니수습으로 할 수 .
SELECT @@datadir;
+-----------------+
| @@datadir |
+-----------------+
| /var/lib/mysql/ |
+-----------------+
MySQL에서는 테이블스페이스당 하나의 데이터 파일만 추가할 수 있습니다.그러나 Oracle 또는 SQL Server에서는 여러 데이터 파일을 테이블스페이스에 추가할 수 있습니다.
- 테블스스테작성하려면을 -tablespace1
우리는 명령을 내릴 필요가 있습니다.
CREATE TABLE table3 (
-> col1 INT
-> )
-> TABLESPACE = tablespace1;
일반 테이블스페이스의 경우 하나의 테이블스페이스 내에 여러 테이블을 만들 수 있습니다.
CREATE TABLE table4 (
-> col1 INT
-> )
-> TABLESPACE = tablespace1;
테이블스페이스를 만드는 동안 데이터 파일 위치를 단독으로 지정할 수 없습니다.다음 명령도 작동합니다.
CREATE TABLESPACE tablespace2 ADD DATAFILE 'tablespace2.ibd' engine = Innodb;
SELECT TABLESPACE_NAME, FILE_NAME FROM information_schema.FILES;
+---------------------------+--------------------------------+
| TABLESPACE_NAME | FILE_NAME |
+---------------------------+--------------------------------+
| database1/table1 | ./database1/table1.ibd |
| database1/table2 | ./database1/table2.ibd |
| tablespace1 | /var/lib/mysql/tablespace1.ibd |
| tablespace2 | ./tablespace2.ibd |
+---------------------------+--------------------------------+
여기서 기본적으로 모든 테이블스페이스는datadir
디렉토리
테이블스페이스는 기본값의 페이지 크기를 작성합니다.그러나 테이블스페이스를 작성하는 동안 자체 페이지 크기를 설정할 수도 있습니다.그러나 크기는 기본 페이지 크기 내에 있어야 합니다. 그렇지 않으면 오류가 발생합니다.MySQL 서버를 설치하는 동안 기본 페이지 크기를 설정할 수 있습니다.
허용되는 페이지 크기는 -4kb, 8kb, 16kb, 32kb, 64kb입니다.
일반적으로 설치 중에는 16kb가 기본 페이지 크기로 설정됩니다.
다음 명령은 기본 페이지 크기를 보는 데 사용됩니다.
SHOW VARIABLES LIKE 'innodb_page_size';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| innodb_page_size | 16384 |
+------------------+-------+
사용자 정의 페이지 크기로 테이블스페이스를 만드는 명령은 -입니다.
CREATE TABLESPACE tablespace3_8kb ADD DATAFILE '/var/lib//mysql/tablespace3_8kb.ibd' FILE_BLOCK_SIZE = 8192 ENGINE = Innodb;
SELECT TABLESPACE_NAME, FILE_NAME FROM information_schema.FILES;
+---------------------------+-------------------------------------+
| TABLESPACE_NAME | FILE_NAME |
+---------------------------+-------------------------------------+
| database1/table1 | ./database1/table1.ibd |
| database1/table2 | ./database1/table2.ibd |
| tablespace1 | /var/lib/mysql/tablespace1.ibd |
| tablespace2 | ./tablespace2.ibd |
| tablespace3_8kb | /var/lib//mysql/tablespace3_8kb.ibd |
+---------------------------+-------------------------------------+
사용자 정의 페이지 크기의 테이블스페이스에 테이블을 저장하려면 다른 구문이 필요합니다.
CREATE TABLE table5 (
-> col1 INT
-> )
-> TABLESPACE = tablespace3_8kb
-> KEY_BLOCK_SIZE = 8;
시스템에서 생성된 테이블스페이스와 달리 일반 테이블스페이스는 테이블을 삭제해도 자동으로 삭제되지 않으므로 테이블스페이스를 명시적으로 삭제해야 합니다.
명령은 -입니다.
DROP TABLESPACE tablespace_name;
MySQL Innodb TableSpace는 데이터 디렉토리(기본적으로 "시스템 테이블스페이스")라는 디스크에 데이터가 상주하는 위치입니다.예:
"/var/lib/sk"
MySQL 버전 5.6.6에서 사용자는 데이터 조작 및 복구 프로세스의 처리량을 가능하게 하는 데이터를 저장할 테이블 공간을 만들고 지정할 수 있습니다.InnoDB의 테이블별 파일 기능은 각 테이블에 개별 일반 테이블 공간을 나타내는 별도의 .ibd 데이터 및 인덱스 파일을 제공합니다.데이터베이스의 각 테이블이 데이터 디렉토리의 다양한 위치를 가리킬 수 있도록 합니다.
예:
/home/{user}/test/data/{dbName}/{tableName}.ibd
/home/{user}/work/data/{dbName}/{tableName}.ibd
테이블별 파일 공간에 대한 자세한 내용은 이 mysql 설명서를 참조하십시오.
기본적으로 InnoDB에는 ID가 0인 시스템 테이블스페이스라는 테이블스페이스가 하나만 포함되어 있습니다.innodb_file_per_table 구성 매개 변수를 사용하여 간접적으로 더 많은 테이블스페이스를 만들 수 있습니다.테이블스페이스는 파일 체인으로 구성됩니다.파일 크기는 데이터베이스 블록 크기로 구분할 필요가 없습니다. 마지막 불완전한 블록을 사용하지 않고 그대로 둘 수 있기 때문입니다.새 파일이 테이블스페이스에 추가되면 파일의 최대 크기도 지정됩니다.현재로서는 테이블스페이스에 더 많은 공간이 필요할 때 파일을 동적으로 확장하는 것을 피할 수 있기 때문에 파일을 생성할 때 이미 최대 크기로 확장하는 것이 가장 좋다고 생각합니다.데이터 파일은 동적으로 확장되지만 redo 로그 파일은 미리 할당됩니다.또한 앞에서 이미 언급했듯이 시스템 테이블스페이스에만 둘 이상의 데이터 파일이 있을 수 있습니다.테이블 공간에 여러 개의 파일이 있을 수 있지만 하나의 큰 파일이 연결된 것으로 간주된다는 점도 분명히 언급됩니다.따라서 테이블스페이스 내의 파일 순서가 중요합니다.
출처: https://blogs.oracle.com/mysqlinnodb/entry/data_organization_in_innodb
sql 클라이언트는 sql 개체만 사용해야 하며 데이터베이스 서버가 해당 정보를 물리적으로 저장하는 위치와 관련이 없습니다.
테이블스페이스의 개념이 필요한 이유입니다. 테이블 데이터와 같은 sql 객체는 sql 클라이언트의 관점에서 테이블스페이스로 들어갑니다.
이제 db 서버 관리자는 테이블 공간을 물리적으로 원하는 위치에 자유롭게 배치할 수 있으며, sql 클라이언트 프로그램은 여전히 작동합니다.
언급URL : https://stackoverflow.com/questions/37805316/what-is-a-tablespace-and-why-is-it-used
'programing' 카테고리의 다른 글
오류: 'uint16_t'이(가) 선언되지 않았습니까? (0) | 2023.08.04 |
---|---|
완료 버튼으로 UI Picker View를 만드는 방법은 무엇입니까? (0) | 2023.08.04 |
3차 연산자 및 문자열 연결 특이점? (0) | 2023.08.04 |
쿼리 실행에서 테이블 열기 상태는 정확히 무엇입니까? (0) | 2023.08.04 |
PL/SQL Developer의 실행 절차에 문제가 있습니다. (0) | 2023.08.04 |