Questions tagged «innodb»

InnoDB:MySQL的符合ACID的存储引擎

3
频繁查询缓存失效的开销值得吗?
我目前正在使用一个MySQL数据库,在该数据库中,我们从查询缓存中看到大量无效信息,这主要是由于在许多表上执行的INSERT,DELETE和UPDATE语句数量很多。 我要确定的是,将查询缓存用于针对这些表运行的SELECT语句是否有任何好处。由于它们是如此之快地失效,在我看来,最好的办法是仅对这些表的SELECT语句使用SQL_NO_CACHE。 频繁失效的间接费用是否值得? 编辑:在下面的用户@RolandoMySQLDBA的请求下,这是MyISAM和INNODB上的信息。 创新数据库 资料大小:177.414 GB 索引大小:114.792 GB 桌子大小:292.205 GB 我的ISAM 资料大小:379.762 GB 索引大小:80.681 GB 桌子大小:460.443 GB 附加信息: 版本:5.0.85 query_cache_limit:1048576 query_cache_min_res_unit:4096 query_cache_size:104857600 query_cache_type:开启 query_cache_wlock_invalidate:关闭 innodb_buffer_pool_size:8841592832 24GB RAM

2
Percona与MySQL
什么是Percona? 它与MySQL有何不同? 我们何时应该考虑从现有的MySQL切换到Percona(或升级)? 为了在我们的情况下添加一些细节,我们几乎专门使用InnoDB(据我了解Percona做了很多优化),它具有广泛的外键约束和一些存储过程。 我们目前发现的是MySQL无法优化查询,因此任何超过3-4个联接的查询都必须使用STRAIGHT联接显式构建以提高性能。

6
检查InnoDB表是否已更改的最快方法
我的应用程序非常耗费数据库。当前,我正在运行MySQL 5.5.19并使用MyISAM,但是我正在迁移到InnoDB。剩下的唯一问题是校验和性能。 我的应用程序CHECKSUM TABLE在高峰时间内每秒执行约500-1000条语句,因为客户端GUI不断轮询数据库以查找更改(它是一个监视系统,因此必须非常敏感且快速)。 使用MyISAM,可以在修改表时预先计算出实时校验和,而且校验和非常快。但是,InnoDB中没有这样的东西。所以,CHECKSUM TABLE非常慢。 我希望能够检查表的最后更新时间,不幸的是,这在InnoDB中也不可用。我被困住了,因为测试表明应用程序的性能急剧下降。 太多的代码行更新了表,因此在应用程序中实现逻辑以记录表更改就成为不可能了。 有什么快速的方法可以检测InnoDB表中的更改?

1
关于MySQL innodb_flush_method变量的说明
首先,让我承认我对硬盘的内部运行情况一无所知。因此,当我阅读有关变量innodb_flush_method的手册时,我感到困惑。我可以用外行的术语来解释O_DSYNC和O_DIRECT的区别,以及如何知道这是否是数据库服务器上的性能问题。 我的设置上的一些统计信息:运行MySQL 5.1.49-64位的Mac OSX 10.6(32位内核,因为体系结构已过时)(希望它可以让我使用内存)。8GB RAM,〜6GB innodb数据/索引。
21 mysql  innodb 


1
MySQL解释中的filter的含义是什么?
如此处的MySQL文档所述: 已过滤的列指示将被表条件过滤的表行的估计百分比。也就是说,行显示了检查的行的估计数,行×过滤后的行数/ 100显示了将与以前的表连接的行数。在MySQL 5.7.3之前,如果使用EXPLAIN EXTENDED,则会显示此列。从MySQL 5.7.3开始,默认情况下启用扩展输出,并且EXTENDED关键字是不必要的。 我还是不明白。“过滤”在这里是什么意思?我们可以从本专栏获得什么信息? 例如,当我开始查询时,某些查询将显示100,而另一些则显示18或任何低于100的查询。 +-------------+-------+--------+---------+---------+------+----------+ | select_type | table | type | key | key_len | rows | filtered | +-------------+-------+--------+---------+---------+------+----------+ | PRIMARY | a | range | search | 4 | 174 | 18.00 | <-- | PRIMARY | b | eq_ref | PRIMARY | …

3
生产中从INT到BIGINT的ALTER主键列(MySQL 5.6.19a)
生产数据库中的某些INNODB表即将达到INT AUTO_INCREMENT限制2147483647,我们需要将它们更改为BIGINT,否则写入将开始失败。 这些表位于在Amazon RDS上运行的生产MySQL 5.6.19a数据库中。 我们如何做这样的ALTER,而又不中断一直在发生的生产读取和插入? ALTER TABLE MYTABLECHANGE id idBIGINT NOT NULL AUTO_INCREMENT; 这是该表的DDL: CREATE TABLE `MYTABLE` ( `id` int(11) NOT NULL AUTO_INCREMENT, `siteId` int(11) NOT NULL, `filter` varchar(10) NOT NULL DEFAULT 'ALL', `date` varchar(10) NOT NULL, `cards` varchar(250) NOT NULL, `apples` varchar(45) NOT NULL, `carrots` varchar(45) NOT NULL, …
20 mysql  innodb 

4
理解INNODB缓冲池统计信息
阅读完mysql文档中的此页后,我试图弄清当前InnoDB的用法。目前,我们为缓冲池分配了6GB的RAM。我们的数据库大小大致相同。这是show engine innodb status\G(我们正在运行v5.5)的输出 ---------------------- BUFFER POOL AND MEMORY ---------------------- Total memory allocated 6593445888; in additional pool allocated 0 Dictionary memory allocated 1758417 Buffer pool size 393215 Free buffers 853 Database pages 360515 Old database pages 133060 Modified db pages 300 Pending reads 0 Pending writes: LRU 0, flush list …

2
设置innodb_buffer_pool是什么,为什么?
我有170GB的InnoDB索引和数据。 我必须重新调整innodb_buffer_pool大小才能获得更好的性能.InnoDB表的最大表大小(Index + data)为28GB。 那么innodb_buffer_pool的最佳大小应该是多少。 更新 我们将要将此本地数据库迁移到ec2,因此将根据innodb的当前统计信息设置RAM,这就是为什么我需要缓冲池的大小,以便在那里可以有可用RAM的原因。 每个表的文件已启用。 我正在使用Linux机器。
20 mysql  innodb 

3
为什么InnoDB不存储行数?
每个人都知道,在使用InnoDB作为引擎的表中,诸如此类SELECT COUNT(*) FROM mytable的查询非常不精确且非常慢,尤其是当表变大并且在执行查询时不断插入/删除行时。 据我了解,InnoDB不会将行数存储在内部变量中,这就是导致此问题的原因。 我的问题是:为什么会这样?存储这样的信息会很难吗?在很多情况下了解这是重要的信息。我看到是否会实现这种内部计数的唯一困难是涉及事务时:如果事务未提交,您是否计算它插入的行? PS:我不是数据库专家,我只是将MySQL作为简单爱好的人。因此,如果我只是问一些愚蠢的问题,请不要过于批评:D。
19 mysql  innodb  count 

3
建议使用innodb_file_per_table吗?
我们有一个应用程序,其中只有一个表将增长到一百万行,而其余表将不足一百万。那么,我们应该使用innodb_file_per_table还是保留一个.ibd的建议呢?我读过一些文章说不要使用它,因为执行连接时需要更多磁盘访问权限?我们将在此表和其他表之间建立联接,以生成报告。
19 mysql  innodb 

1
是否可以更改ENUM()列表?
我不确定是否无法更改ENUM()列表,所以我进行了测试。在MySQL v5.1.58中,我测试了一个InnoDB表,其中包含一个名为ENUM('yes','no')类型的“ bool”字段。 然后我执行了... ALTER TABLE `test` CHANGE `bool` `bool` ENUM( 'yes', 'no', 'maybe' ) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL ...而且有效。 我做错了什么吗?它取决于数据库引擎吗?为什么每个人都说不可能更改ENUM()列表?例如。此处http://komlenic.com/244/8-reasons-why-mysqls-enum-data-type-is-evil/
19 mysql  innodb 

4
增加innodb_buffer_pool_size和innodb_log_file_size后,mysql将无法启动
我在这里遵循此解决方案/programming/3927690/howto-clean-a-mysql-innodb-storage-engine/4056261#comment14041132_4056261并尝试将其增加到innodb_buffer_pool_size4G和更高的1G(也为1024M)除了日志文件的大小,但mysql不会以这些值开头。如果我把它放回512M,mysql启动正常。 我该如何解决?我的服务器是16GB,根据Webmin sysinfo的说法: Real memory 15.62 GB total, 3.13 GB used 同时,我也找到了错误日志: 120529 10:29:32 mysqld_safe mysqld从pid文件/var/run/mysqld/mysqld.pid结束 120529 10:29:33 mysqld_safe使用/ var / lib / mysql中的数据库启动mysqld守护程序 120529 10:29:33 [注意]插件“ FEDERATED”已禁用。 120529 10:29:33 InnoDB:InnoDB内存堆已禁用 120529 10:29:33 InnoDB:互斥体和rw_locks使用GCC原子内置函数 120529 10:29:33 InnoDB:压缩表使用zlib 1.2.3 120529 10:29:33 InnoDB:使用Linux本机AIO 120529 10:29:33 InnoDB:初始化缓冲池,大小= 1.0G 120529 10:29:33 InnoDB:缓冲池的完成初始化 InnoDB:错误:日志文件./ib_logfile0的大小不同0 134217728字节 …

2
MySQL-更改实时数据库的innodb_file_per_table
我有一个大型的MySql数据库(150GB),只是现在我才注意到,将innodb_file_per_table设置为off会导致整个数据库托管在一个文件中(ibdata1)。我想激活innodb_file_per_table它并追溯地将数据库分成几个文件,执行此操作的最佳方法是什么?
18 mysql  innodb  my.cnf 

4
如何将66,862,521行表从MyISAM转换为InnoDB,而又不用离线几个小时?
是否有可能(以及如何)在不使应用程序脱机的情况下将巨大的MyISAM表转换为InnoDB。它需要每秒在该表中插入几行,但是可以将其挂起大约2分钟。 显然ALTER TABLE ... engine = innodb无法正常工作。因此,我计划使用innodb引擎创建一个新表并将内容复制到其中。最后,挂起应用程序日志线程和RENAME TABLE。 不幸的是,即使以100行的小批量进行复制,在一段时间后也会产生明显的延迟。 编辑:现有行永远不会更改,此表用于记录。
18 mysql  innodb 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.