Questions tagged «mysql»

MySQL的所有版本(不是Microsoft SQL Server)。如果与此问题相关,还请添加特定于版本的标记,例如mysql-5.7。

7
为什么不能在MySQL中使用MEMORY存储引擎的原因是什么?
最近,我发现MySQL具有一个我不知道的“内存”引擎(我的大部分数据库工作是针对业余项目的,因此我会随时了解自己的需求)。看来此选项应该可以大大提高我的性能,所以我想知道它是否有任何缺点。我知道的两个是: 我需要有足够的RAM来容纳有问题的表。 如果机器关闭,表将丢失。 我认为#1应该不是问题,因为我正在使用AWS EC2,并且可以根据需要移到具有更多内存的实例类型。我相信我可以通过根据需要转储回磁盘来减轻#2的压力。 还有什么其他问题?内存引擎能否提供比MyISAM或InnoDB更差的性能?我认为我读到的东西与此引擎的索引不同;这是我需要担心的事情吗?

4
为什么在解释查询中读取const表后会收到“不可能在哪里注意到”的信息?
当我运行带有解释的查询时,表中有一个独特的复合键,如fr(fromid,toid),得到以下结果: Impossible WHERE noticed after reading const tables` 我运行的查询: explain SELECT rid FROM relationship WHERE fromid=78 AND toid=60 有什么帮助吗? EDIT1: 当我使用以下查询时: explain SELECT rid FROM relationship WHERE fromid=60 and toid=78 AND is_approved='s' OR is_approved='f' OR is_approved='t' 我看到的USING WHERE不是上一条消息,而是当我使用以下查询时: explain SELECT rid FROM relationship WHERE fromid=60 and toid=78 AND (is_approved='s' OR …
27 mysql  explain 

2
MySQL在磁盘上创建临时表。如何停止?
我们正在运行一个用户当前发现缓慢的网站(Moodle)。我认为我已将问题归结为MySQL在磁盘上创建临时表。我created_tmp_disk_tables在Mysql Workbench服务器管理中观察该变量,并且该数目以大约50个表/秒的速度增加。使用几天后,created_tmp_disk_tables> 100k。此外,似乎没有释放内存。使用率一直在增加,直到系统变得几乎无法使用为止,我们必须重新启动MySQL。我几乎每天都需要重新启动它,首先要使用大约30-35%的可用内存,然后以80%的时间结束一天。 我在数据库中没有斑点,也无法控制查询,因此我无法尝试对其进行优化。我还使用了Percona Confirguration向导来生成配置文件,但是my.ini也不能解决我的问题。 问题 我应该怎么做才能阻止MySQL在磁盘上创建临时表?是否需要更改设置?我应该为此增加更多的内存吗? 如何阻止MySQL耗尽内存? 编辑 我启用了slow_queries日志,发现查询SELECT GET_LOCK()记录得很慢。快速搜索显示,我已允许PHP配置(mysqli.allow_persistent = ON)中的持久连接。我关闭了 这降低了MySQL占用内存的速度,尽管它仍在创建临时表。 我还检查了key_buffer size是否足够大。我看着变量key_writes。应该为零。如果不是,请增加key_buffer_size.I为零key_reads和零,key_writes因此我假设key_buffer_size足够大。 我将tmp_table_size和max-heap-table-size增加到1024M,因为created_tmp_disk_tables的增加可能表示表无法容纳在内存中。这没有解决。 参考:http : //www.mysqlperformanceblog.com/2007/08/16/how-much-overhead-is-caused-by-on-disk-temporary-tables/ 编辑2 如果sort_merge_passes在SHOW GLOBAL STATUS输出中看到每秒很多,则可以考虑增加该sort_buffer_size值。我sort_merge_passes一个小时有2个,所以我认为sort_buffer_size足够大了。 参考:Mysql手册 sort_buffer_size 编辑3 我已经按照@RolandoMySQLDBA的建议修改了排序和联接缓冲区。结果显示在下表中,但我认为created_tmp_tables_on_disk仍然很高。我更改了值并检查created_tmp_tables_on_disk了一天(8h)后并计算平均值后,重新启动了mysql服务器。还有其他建议吗?在我看来,有些东西不能放入某种容器中,但是我无法弄清楚它到底是什么。 +---------------------+-------------+-------------+--------------------+ | Tmp_table_size, | Sort_buffer | Join_buffer | No of created | | max_heap_table_size | | | tmp_tables on disk | +---------------------+-------------+-------------+--------------------+ …

2
如何正确执行MySQL烘烤?
我想针对一些其他分支(例如Percona服务器,MariaDB以及可能还有其他一些)进行性能测试(又称烘烤)MySQL服务器rpm。我希望通过提出这个问题,我可以更好地理解设置适当的性能测试的方法。我计划使用sysbench来运行我的实际测试,但是我可以接受任何东西。 我应该采取什么步骤来确保测试结果一目了然,并且只有RDBMS是变体? 我从哪里开始? 如何评估结果? 你能给我什么建议?


2
错误1114(HY000)表…已满,并且innodb_file_per_table设置为自动扩展
我有一个MySQL数据库,可容纳大量数据(100-200GB-一堆科学测量值)。绝大多数数据存储在一张表中Sample。现在,我正在创建数据库的从属副本,我想innodb_file_per_table在此过程中充分利用的优势。因此,我设置innodb_file_per_table了从属配置,并导入了数据库的转储。令我惊讶的是,它失败了 第5602行的错误1114(HY000):表“样本”已满 该文件Sample.ibd当前约为93GB,分区上有600GB以上的可用空间,因此这不是磁盘可用空间问题。它似乎都没有达到任何类型的文件系统限制(我正在使用ext4)。 如果有任何想法,我将不胜感激,或者可能要调查什么。 更新:我正在使用mysql Ver 14.14 Distrib 5.1.66, for debian-linux-gnu (x86_64)。 SELECT @@datadir; -- returns `/home/var/lib/mysql/` SHOW VARIABLES LIKE '%innodb_data_file_path%'; -- ibdata1:10M:autoextend df -h /home/var/lib/mysql/ 768G 31G 699G 5% /home

2
mysql锁定等待超时超出;尝试重新启动事务
我们正在运行java应用程序,运行了很长时间,后端是db,是MySQL,最近更新到mysql 5.6。一切运行良好,过去一周开始出现此错误,超过了锁定等待超时;尝试重启似乎永不停止的事务,不知道如何处理此错误才能停止。为什么它突然发生
26 mysql  mysql-5.6 

5
如何在MySQL中估算/预测表的数据大小和索引大小
我正在研究很多博客和论坛,但找不到任何准确答案,因此我发现估算表大小的最佳方法是什么? 例如,我们有一个带有InnoDB引擎的表City,可以说在未来(未来1年)它将有100万条记录,因此在此期间该表的估计数据大小和索引大小是多少。 mysql> desc City; +-------------+----------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------------+----------+------+-----+---------+----------------+ | ID | int(11) | NO | PRI | NULL | auto_increment | | Name | char(35) | NO | | | | | CountryCode | char(3) | NO | …
26 mysql  innodb 

7
为什么要使用innodb_file_per_table?
有许多文章夸大了(当然是恕我直言)对的需要innodb_file_per_table。我知道使用innodb_file_per_table,应该可以更好地控制各个表;例如分别备份每个表。但是,关于获得更好性能的要求令人怀疑。 在我的测试中,在性能没有差异innodb_file_per_table,并ibdata1为60GB的数据库。当然,这是对普通查询的简单测试,现实生活中复杂查询的情况可能有所不同(这就是我问这个问题的原因)。具有64位linux ext4可以有效处理大文件。 使用innodb_file_per_table,需要更多的磁盘I / O操作;这对于复杂的JOINs和FOREIGN KEY约束非常重要。 表空间在单个共享ibdata;单独表的专用表空间如何节省磁盘空间?当然,使用释放每个表的表空间更为容易ALTER,但是这仍然是一个昂贵的过程(使用表锁)。 问题:是否innodb_file_per_table对更好的mysql性能有影响?如果是,为什么?


2
“ ibfk”在MySQL中代表什么?
如果我在phpmyadmin中为表“ photos”创建外键约束,则稍后会看到该约束名为“ photos_ibfk_1”,下一个约束名为“ photos_ibfk_2”,依此类推。由此,我得出[tablename] _ibfk_constraintIndex为MySQL中数据库约束的约定。它是否正确?IBFK代表什么?

1
Mysql Innodb:InnoDB:错误:最后一个检查点的寿命是InnoDB:它超出了日志组的容量
我真的需要一些mysql专业知识。我是mysql的新手,并且在过去1周内看到数据库的服务器崩溃。 我在Ubuntu上使用mysql 5.1.36。这是具有双核和4GB内存以及40GB SSD的专用mysql服务器。 日志错误为: 120413 23:57:15 [Note] Plugin 'FEDERATED' is disabled. 120413 23:57:15 [Warning] option 'innodb-autoextend-increment': unsigned value 2000 adjusted to 1000 120413 23:57:15 InnoDB: Initializing buffer pool, size = 2.9G 120413 23:57:15 InnoDB: Completed initialization of buffer pool 120413 23:57:16 InnoDB: Started; log sequence number 0 44234 120413 …
25 mysql  innodb 

3
innodb_file_format梭子鱼
对于那些比较熟悉的人,我有几个问题。尽管有梭子鱼的支持,我的大多数实例仍在运行Antelope。 我一直在寻找一些压缩innodb表的方法。我的理解是,这仅在梭子鱼格式下可用。 我看到innodb_file_format是动态的,因此我可以不跳动地切换。我应该意识到这样做的任何含义。我只能说意味着将使用该格式创建新表或随后更改的表。这一切正确吗? 我希望不必经历所有表的转换。犹太洁食器是否在同一表空间中同时存在羚羊和梭子鱼表?即使有效,也有什么需要注意的地方吗? 从我阅读并从测试中收集的信息来看,答案是:是的。是。我不确定。 更新资料 自这篇文章发布以来,我一直在各种实例中运行一些动态表和一些压缩表。此外,我 当时忽略了阅读http://dev.mysql.com/doc/refman/5.5/en/innodb-file-format-identifying.html。 启用给定的innodb_file_format后,此更改仅适用于新创建的表,而不适用于现有的表。如果您确实创建了一个新表,则包含该表的表空间将被标记为具有该表功能所需的“最早”或“最简单”的文件格式。例如,如果启用文件格式梭子鱼,并创建未压缩且不使用ROW_FORMAT = DYNAMIC的新表,则包含该表的新表空间将被标记为使用文件格式Antelope。 因此,即使您允许梭子鱼,表也将被创建为羚羊。除非您将每个表都指定为row_format动态表或压缩表,否则混合是不可避免的。 没有迹象表明您在引入第一个梭子鱼表时应该进行完整的转储和重新加载(例如在升级主要版本的mysql时建议使用)

2
在运行时切换二进制日志格式的最安全方法是什么?
由于出现以下警告mysqld.log: [警告]由于BINLOG_FORMAT = STATEMENT,因此使用语句格式将不安全的语句写入二进制日志。该语句不安全,因为它使用LIMIT子句。这是不安全的,因为无法预测其中包含的行集。 我想将复制格式切换为MIXED。 但是根据MySQL文档: 不存在任何临时表时,建议不要在运行时切换复制格式,因为临时表仅在使用基于语句的复制时才记录,而在基于行的复制中则不记录。 因此,问题是如何确定是否存在任何临时表来安全地切换二进制日志格式?

8
生成测试数据的大型数据集的工具
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为数据库管理员Stack Exchange 的主题。 5年前关闭。 已锁定。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。 很多时候,当试图提出一种有效的数据库设计时,最佳的做法是建立两个示例数据库,将它们填充数据,并对它们运行一些查询,以查看哪个数据库性能更好。 有没有一种工具可以相对快速地生成(理想情况下直接进入数据库)大型(约10,000条记录)测试数据集?我正在寻找至少与MySQL兼容的产品。

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.