Uploaded image for project: 'MariaDB Server'
  1. MariaDB Server
  2. MDEV-22343

Remove SYS_TABLESPACES and SYS_DATAFILES

Details

    Description

      The InnoDB internal tables SYS_TABLESPACES and SYS_DATAFILES as well as the INFORMATION_SCHEMA views INNODB_SYS_TABLESPACES and INNODB_SYS_DATAFILES were introduced in MySQL 5.6 for no good reason when the InnoDB support for the DATA DIRECTORY table attribute was introduced. The file system should be the authoritative source of information on data files. Storing information about file system paths in the file system (symlinks, or even the .isl files that were unfortunately chosen as the solution) is sufficient. If information is additionally stored in some hidden tables inside the InnoDB system tablespace, everything unnecessarily becomes more complicated, because more copies of data mean more opportunity for the copies to be out of sync, and because modifying the data in the system tablespace in the desired way might not be possible at all without modifying the InnoDB source code. So, the copy in the system tablespace basically is a redundant, non-authoritative source of information.

      For compatibility with older versions, we might want to preserve the INFORMATION_SCHEMA views, but make them reflect the fil_system cache.

      Attachments

        Issue Links

          Activity

            Removing the code to create or access the unnecessary data dictionary tables will also remove some dependencies on the InnoDB internal SQL parser, which would be removed in MDEV-11655.

            marko Marko Mäkelä added a comment - Removing the code to create or access the unnecessary data dictionary tables will also remove some dependencies on the InnoDB internal SQL parser, which would be removed in MDEV-11655 .

            We will stop creating or accessing the system tables SYS_TABLESPACES and SYS_DATAFILES.

            We will also remove the view INFORMATION_SCHEMA.INNODB_SYS_DATAFILES.

            The view INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES will be repurposed to directly reflect fil_system.space_list. The column PAGE_SIZE, which would always contain the value of the GLOBAL read-only variable innodb_page_size, is removed. The column ZIP_PAGE_SIZE, which would actually contain the physical page size of a page, is renamed to PAGE_SIZE. Finally, a new column FILENAME is added, as a replacement of SYS_DATAFILES.PATH.

            marko Marko Mäkelä added a comment - We will stop creating or accessing the system tables SYS_TABLESPACES and SYS_DATAFILES. We will also remove the view INFORMATION_SCHEMA.INNODB_SYS_DATAFILES. The view INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES will be repurposed to directly reflect fil_system.space_list. The column PAGE_SIZE, which would always contain the value of the GLOBAL read-only variable innodb_page_size, is removed. The column ZIP_PAGE_SIZE, which would actually contain the physical page size of a page, is renamed to PAGE_SIZE. Finally, a new column FILENAME is added, as a replacement of SYS_DATAFILES.PATH.

            People

              marko Marko Mäkelä
              marko Marko Mäkelä
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Git Integration

                  Error rendering 'com.xiplink.jira.git.jira_git_plugin:git-issue-webpanel'. Please contact your Jira administrators.