Что такое табличное пространство и почему оно используется?
При исследовании проблемы я столкнулся с этой ошибкой:
30503 [ERROR] InnoDB: Попытка открыть ранее открытое табличное пространство. Предыдущее табличное пространство mysql/innodb_index_stats использует пробел ID: 2 в пути к файлу:./mysql/innodb_index_stats.ibd. Не удается открыть табличное пространство Mydb/be_command_log, которое использует пробел ID: 2 в пути к файлу:./Mydb/be_command_log.ibd
Прочитав немного об этой проблеме, я узнал, что это известная проблема MySQL.
Но моя проблема в том, что я не очень разбираюсь в том, как работают табличные пространства. Как они полезны? Я читал это определение, но он не дает всю информацию.
Может ли кто-нибудь поделиться подробной информацией о , что такое табличные пространства и как они работают?
Ответы
Ответ 1
Файл данных, который может хранить данные для одной или нескольких таблиц InnoDB и связанных индексов.
Существует множество типов табличных пространств, основанных на конфигурации w.r.t, в информационном клубе для каждой таблицы. Это
а. Системное табличное пространство
б. Файл в табличном пространстве
с. Общее табличное пространство
Системное табличное пространство содержит,
- Словарь данных InnoDB.
- Буфер DoubleWrite.
- Изменить буфер
- Отменить журналы.
Кроме того, он также содержит
Связанный файл .idbdata1
Параметр innodb_file_per_table, который по умолчанию включен в MySQL 5.6 и выше, позволяет создавать таблицы в табличных пространствах файлов за таблицей с отдельным файлом данных для каждой таблицы. Включение параметра innodb_file_per_table предоставляет другие функции MySQL, такие как сжатие таблиц и переносимые табличные пространства.
Связанный файл .idbd
InnoDB представил общие табличные пространства в MySQL 5.7.6. Общие табличные пространства - это общие табличные пространства, созданные с использованием синтаксиса CREATE TABLESPACE. Они могут быть созданы за пределами каталога данных MySQL, способны хранить несколько таблиц и поддерживать таблицы всех форматов строк.
Ответ 2
По умолчанию InnoDB содержит только одно табличное пространство, называемое системным табличным пространством с идентификатором 0. Дополнительные табличные пространства могут создаваться косвенно с помощью параметра конфигурации innodb_file_per_table. Табличное пространство состоит из цепочки файлов. Размер файлов не должен делиться на размер блока базы данных, потому что мы можем просто оставить последний незавершенный блок неиспользованным. Когда к табличному пространству добавляется новый файл, также указывается максимальный размер файла. На данный момент мы считаем, что лучше всего увеличить файл до максимального размера уже при создании файла, потому что тогда мы можем избежать динамического расширения файла, когда для табличного пространства требуется больше места. Файлы данных динамически расширяются, но файлы журнала повторного использования предварительно назначаются. Кроме того, как уже упоминалось ранее, только системное табличное пространство может иметь более одного файла данных. Также ясно сказано, что, хотя табличное пространство может иметь несколько файлов, они рассматриваются как один большой файл, объединенный вместе. Поэтому порядок файлов в табличном пространстве важен.
Из https://blogs.oracle.com/mysqlinnodb/entry/data_organization_in_innodb
Ответ 3
MySQL Innodb TableSpace - это место, где данные находятся на диске, называемом каталогом данных (по умолчанию "системное табличное пространство" ). Пример:
"/Var/Library/MySQL"
Из MySQL версии 5.6.6 пользователь может создавать и указывать табличное пространство, в котором они хотят хранить данные, которые обеспечивают пропускную способность процесса обработки данных и восстановления. Функция InnoDB file-per-table предлагает в каждой таблице отдельные файлы данных и индексов .ibd, которые представляют собой отдельное общее табличное пространство. Чтобы каждая таблица в базе данных могла указывать различные местоположения каталогов данных.
Пример:
/дом/{пользователь}/тест/данные/{DbName}/{TableName}.ibd
/дом/{пользователь}/работа/данные/{DbName}/{TableName}.ibd
Подробнее о табличном пространстве файлов за таблицей см. эту документацию mysql.
Ответ 4
sql-клиенты должны использовать только объекты sql и не иметь отношения к тому, где сервер базы данных физически хранит эту информацию.
почему нужна концепция табличного пространства. Объекты sql, такие как данные таблицы, попадают в табличное пространство с точки зрения клиента sql.
Администраторы db-сервера теперь могут физически размещать табличное пространство, где они хотят, чтобы он физически переводился, клиентские программы sql все еще работают.