Mik*_*e B 6 mysql innodb windows mysql-5.1
MySQL 5.1.4x (Windows) | 数据库
我最近从 mySQL 数据库(几十万行)中清除了数据,我打算使用
OPTIMIZE TABLE LOGTABLEFOO1,LOGTABLEFOO2,LOGTABLEFOO3;
Run Code Online (Sandbox Code Playgroud)
为了减少文件系统中的空白空间占用的数据空间。
我担心的是,一旦我开始执行此命令,我将不知道要花多长时间或在此过程中处于什么位置。无论如何我可以确定这些信息吗?据我所知,没有进度指示器。
Rol*_*DBA 12
MySQL 没有任何东西可以指示OPTIMIZE TABLE;
.
您可能必须使用 Windows 资源管理器访问操作系统并查找不断增长的 tmp 表。提示:临时表是 MyISAM 表,没有 . frm
文件名#sql-9999.MYD
和#sql-9999.MYI
. 当这两个文件存在时,查询将被视为正在进行中。要知道多远,人们必须知道有多少行乘以平均行长度来估计完成或剩余完成的百分比。
ALTER TABLE
ADD INDEX
DROP INDEX
LOAD DATA INFILE
CHECK TABLE
REPAIR TABLE
ANALYZE TABLE
OPTIMIZE TABLE
我之前讨论过 MySQL 操作方面的主题
May 02, 2012
:如何监控大型 .sql 文件的导入进度?Jan 17, 2012
:添加索引很慢...是否有 mysql cmd 来获取 ETA 或显示进度?如果您试图减少 InnoDB 的 ibdata1 的大小,删除表只会在 ibdata1 中留下很大的空白。您必须对 InnoDB 基础设施执行完全清理。
Apr 01, 2012
: innodb_file_per_table 是否可取?Mar 25, 2012
:为什么InnoDB 将所有数据库都存储在一个文件中?Mar 29, 2011
:在 Windows (NTFS) 上运行的 MySQL 数据库服务器的最大表大小表类型 InnoDBFeb 04, 2011
: MySQL InnoDB - innodb_file_per_table 的缺点?Oct 29, 2010
: Howto: 清理 mysql InnoDB 存储引擎?由于这个数据库使用innodb,我可以寻找一个不断增长的临时表吗?
假设你想跑步
OPTIMIZE TABLE mydb.mytable;
Run Code Online (Sandbox Code Playgroud)
看两个涉及innodb_file_per_table 的场景和这个OPTIMIZE TABLE
运行OPTIMIZE TABLE
将导致所有数据和索引页mydb.mytable
被连续附加到 ibdata1。这将留下先前占用的空间,以进一步增加碎片化的疯狂程度。
在这种情况下,临时表将作为 InnoDB 存在,并将在 ibdata1 中具体化。因此,将没有任何可目视监控的内容。
对于每个 InnoDB 表 mydb.mytable 你会有
该.ibd
文件包含表的数据和索引页。
运行OPTIMIZE TABLE
将导致所有数据和索引页mydb.mytable
写入到.ibd
您可以在 Windows 资源管理器中看到的外部文件。
启用innodb_file_per_table并运行OPTIMIZE TABLE
将永远不会回收以前在 ibdata1 中占用的空间。您将必须执行InnoDB 清理以重新创建 ibdata1,以使数据和索引永远不会再驻留在 ibdata1 中。
如前所述,MariaDB 可以监控 OPTIMIZE TABLE;
如果你想要一些你可以监控的东西并且你启用了innodb_file_per_table,你可以替换
OPTIMIZE TABLE LOGTABLEFOO1,LOGTABLEFOO2,LOGTABLEFOO3;
Run Code Online (Sandbox Code Playgroud)
具有以下机械等效项:
CREATE TABLE LOGTABLEFOO1_NEW LIKE LOGTABLEFOO1;
INSERT INTO LOGTABLEFOO1_NEW SELECT * FROM LOGTABLEFOO1;
ALTER TABLE LOGTABLEFOO1 RENAME LOGTABLEFOO1_OLD;
ALTER TABLE LOGTABLEFOO1_NEW RENAME LOGTABLEFOO1;
DROP TABLE LOGTABLEFOO1_OLD;
ANALYZE TABLE LOGTABLEFOO1;
CREATE TABLE LOGTABLEFOO2_NEW LIKE LOGTABLEFOO2;
INSERT INTO LOGTABLEFOO2_NEW SELECT * FROM LOGTABLEFOO2;
ALTER TABLE LOGTABLEFOO2 RENAME LOGTABLEFOO2_OLD;
ALTER TABLE LOGTABLEFOO2_NEW RENAME LOGTABLEFOO2;
DROP TABLE LOGTABLEFOO2_OLD;
ANALYZE TABLE LOGTABLEFOO2;
CREATE TABLE LOGTABLEFOO3_NEW LIKE LOGTABLEFOO3;
INSERT INTO LOGTABLEFOO3_NEW SELECT * FROM LOGTABLEFOO3;
ALTER TABLE LOGTABLEFOO3 RENAME LOGTABLEFOO3_OLD;
ALTER TABLE LOGTABLEFOO3_NEW RENAME LOGTABLEFOO3;
DROP TABLE LOGTABLEFOO3_OLD;
ANALYZE TABLE LOGTABLEFOO3;
Run Code Online (Sandbox Code Playgroud)
请记住OPTIMIZE TABLE是什么,但ALTER TABLE ... ENGINE=InnoDB;
随后ANALYZE TABLE。
通过这些步骤,您可以提前知道临时表是什么
LOGTABLEFOO1_NEW.ibd
LOGTABLEFOO2_NEW.ibd
LOGTABLEFOO3_NEW.ibd
只需监视每个文件的存在和大小,直到它消失。
归档时间: |
|
查看次数: |
18034 次 |
最近记录: |