- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下 mysqldump 文件。我有 3 个问题:
1. /* */
中的命令是否被注释掉了,或者它们是否真的被执行了?
2. 根据官方MySQL documentation它说:
The mysqldump option --opt creates dump files that are fast to import into an InnoDB table, even without wrapping them with the SET autocommit and COMMIT statements. opt is enabled by default
但是 mysqldump
文件没有包含 SET auto commit
和 COMMIT
语句,我想知道这些是不是隐含的?还是我需要添加它们。
3. 即使我设置了 unique_checks=0
和 foreign_key_checks=0
,如果我有非唯一 key ,我也应该删除这些键在批量插入之前,然后在之后重新添加它们,以获得性能,对吧?
-- Server version 5.6.10-log
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
LOCK TABLES `xxx` WRITE;
/*!40000 ALTER TABLE `xxx` DISABLE KEYS */;
最佳答案
1. Are the commands within /* */ commented out or are they actually getting executed?
是的,它们实际上正在执行,但仅适用于等于或高于 /*!40101
版本号的 MySQL 版本,如您的示例所示。根据 the MySQL manual on comment syntax :
If you add a version number after the “!” character, the syntax within the comment is executed only if the MySQL version is greater than or equal to the specified version number.
然后就 mysqldump
和 InnoDB 性能而言:
2. But
mysqldump
file didn’t includeSET auto commit
andCOMMIT
statements, I’m wondering if those are implicit? Or do I need to add them.
如解释in the official MySQL performance tips :
When importing data into InnoDB, make sure that MySQL does not have autocommit mode enabled because that requires a log flush to disk for every insert. To disable autocommit during your import operation, surround it with SET auto commit and COMMIT statements.
这与此完全不同:
If you use the mysqldump option --opt, you get dump files that are fast to import into an InnoDB table, even without wrapping them with the
SET autocommit
andCOMMIT
statements.
它实际上并没有禁用SET auto commit
和COMMIT
语句。它只是作用于 InnoDB 设置的默认值,这意味着它是隐式设置的。
3. Even when I set
unique_checks=0
andforeign_key_checks=0,
if I have non-unique key, I should probably remove these keys prior to the bulk insert, and then re-add them afterwards, in order to gain performance, right?
我非常有信心,通过 mysqldump
导出然后再次导入的行为会像这样自动进行房屋清洁。好的,再挖一些,似乎是“随机”键 can negatively impact InnoDB import performance . Paul Dixon 的回答(粗体强调是我的)给出了明确的建议,“你的‘真实’关键字段仍然可以被索引,但是对于批量插入你最好在插入后一次性删除并重新创建该索引完整的。”
关于mysqldump 行为和相关的 InnoDB 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23818552/
我已经在我的 windows7 机器上安装了 bugzilla4.2.5。当我运行 bugzilla 的 checksetup.pl 脚本时,它显示 Use of uninitialized valu
我正在使用 MySQL 5.1.56 我有一个包含大约 70 个表的数据库,我有一个特定损坏的表的问题,例如表_X 当我尝试访问表时mysql> 从 Table_x 中选择 *;ERROR 1105
我最近尝试将 MySQL 5.1 服务器升级到 5.7。当服务器无法启动时,我发现您必须先导出数据,然后再进行大量升级(二进制文件不再可用),所以我回滚到 5.1 进行导出。 问题是,回到 5.1,I
我正处于项目的开始阶段,到目前为止我一直在使用默认的 MySQL 数据库。 对了,默认的数据库有名字吗? 我的问题是如何在不删除当前表和创建新表的情况下将现有表更改为 utf-8 和 InnoDB。是
我最近尝试将 innodb 缓冲池大小增加到 8GB,但在我的 innodb 状态下,池大小看起来像之前配置的值(在我的例子中是 500MB)。 ---------------------- BUFF
我是一家网络酒店的幸运老板,店主会在不知情的情况下更改设置。当这么说时,我的数据库中有一些表正在使用 InnoDB 引擎运行。但是晚上主机禁用了 InnoDB,所以我无法使用 ALTER 命令将其转换
我刚刚将数据库从 MyISAM 引擎迁移到 InnoDB。我使用 mysqldump 备份我的 MyISAM 数据库,但是当我查看 MySQL docs ,对于 InnoDB 表,我还需要保存二进制文
环境: Windows 7(XAMPP 最新版) Apache 2.4.4PHP 5.5MySQL 5.6.11 我正在尝试从 MySQL 5.1 备份数据库并将其导入 MySQL 5.6。 在 My
我正在创建的应用程序主要使用选择,但也有一些是插入、更新等。我想知道在这些情况下哪种性能最好。 其次,当我在 innodb 中有两个相关的表时,如果它与另一个表中的行相关,我该如何删除它而不吐出错误?
我的意思是页面: https://dev.mysql.com/doc/internals/en/innodb-page-structure.html 这些 16KB 的 MySQL 页面会在内存或磁盘
以下是我使用 mysqldump 备份数据库的开关: /usr/bin/mysqldump -u **** --password=**** --single-transaction --databas
我阅读了本网站上的大部分 InnoDB 示例,但我对 InnoDB 的行为一无所知。 据我所知 START TRANSACTION; 声明这是一个事务连接。没关系到这里。现在我有 3 个表: 带有 I
我有一个包含混合表(MyISAM、InnoDB)的 MySQL 数据库。 如何通过 Linux 命令行使用 mysqldump 创建数据库的完整备份,我应该使用什么选项? 最佳答案 在下面使用- 所有
我有一张桌子:。我用Python在这个表中插入了大约400k行。以下是INSERT语句:。我在两个表tab1.col1和tab2.col2上都有一个索引。但是插入大约需要5分钟/1000行的时间。我从
我正在尝试使用 WAMP 在本地服务器上安装 Magento。 InnoDB 被设置为默认引擎,但它仍然向我显示消息: Database server does not support InnoDB
我最近将所有表从 MyISAM 移到了 InnoDB,因为我想摆脱大表上的表锁定。 在以下表上运行 UPDATE 或 INSERT 查询花费的时间比预期的要多很多。 (约 5 分钟) 我如何优化 in
我正在运行带有 XAMPP 的 Windows 10 和在本地主机上安装的几十个 Drupal 站点。几个月来一切都运行良好。 今天早上,我从两天前的还原点执行了 Windows 还原,以删除不需要的
Socialengine 4.8.6 - 启动时显示“白屏”,只能通过浏览器访问 sesystem.com/phpmyadmin 和 sesystem.com/install。 问题开始:我需要一个包
由于 InnoDB 在 B+ 树中组织其数据。树的高度影响 IO 次数,这可能是 DB 变慢的主要原因之一。 所以我的问题是如何断言或计算B+树的高度(例如根据可以通过行大小、页面大小和行号计算的页数
我尝试使用 mysqldump 从系统 A 使用 innodb 默认存储引擎将大约 40gb 的数据库 db1 转储到 sql 文件中,并尝试在另一个系统 B 上恢复它。两者都有默认存储引擎 inno
我是一名优秀的程序员,十分优秀!