Questions tagged «mysql»

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

1
为什么自动增量跳跃的次数超过插入的行数?
auto_increment使用存储过程执行批量插入后,我在Bids表的bidID中记录的值中看到这种奇怪的行为,对此感到非常不安: INSERT INTO Bids (itemID, buyerID, bidPrice) SELECT itemID, rand_id(sellerID, user_last_id), FLOOR((1 + RAND())*askPrice) FROM Items WHERE closing BETWEEN NOW() AND NOW() + INTERVAL 1 WEEK ORDER BY RAND() LIMIT total_rows; 例如,如果开始时的auto_incrementbidID值为101,并且我插入了100行,则结束值将变为213,而不是201。但是,这些插入的行的bidID依次运行,最大为201。 检查以下内容后, SHOW VARIABLES LIKE 'auto_inc%'; +--------------------------+-------+ | Variable_name | Value | +--------------------------+-------+ | auto_increment_increment | 1 | | …

2
MySQL连接到另一个表时不使用索引
我有两个表,第一个表包含CMS中的所有文章/博客文章。其中一些文章也可能出现在杂志上,在这种情况下,它们与另一个包含杂志特定信息的表具有外键关系。 这是这两个表的创建表语法的简化版本,其中删除了一些不必要的行: CREATE TABLE `base_article` ( `id` int(11) NOT NULL AUTO_INCREMENT, `date_published` datetime DEFAULT NULL, `title` varchar(255) NOT NULL, `description` text, `content` longtext, `is_published` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`id`), KEY `base_article_date_published` (`date_published`), KEY `base_article_is_published` (`is_published`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; CREATE TABLE `mag_article` ( `basearticle_ptr_id` int(11) NOT NULL, …

2
MariaDB Java客户端在多大程度上可以完美替代MySQL JDBC(Connector / J)?
前提:我提供了一个Java应用程序,该应用程序将与MySQL数据库建立JDBC连接。(在撰写本文时,它可能是5.1或5.5,但希望问题和答案不会严重依赖该版本。) 观察:显然,我可以使用MySQL JDBC驱动程序(Connector / J)或MariaDB JDBC驱动程序(MariaDB Java Client)建立与MySQL服务器的连接。从ISV的角度来看,一个巨大的好处是MariaDB驱动程序是LGPL许可的,而MySQL驱动程序是GPL的许可的。MariaDB驱动程序的性能似乎非常好。 问题:MariaDB JDBC驱动程序在多大程度上可以完美替代MySQL JDBC驱动程序? 我不是要就两者的相对优点进行辩论。但是,我希望有人可以按照以下其中一种方式回答: MariaDB JDBC驱动程序在X和Y方面存在重要问题,因此,如果使用其中任何一个,都会遇到麻烦。 根据一些文章或规范,代码或其他证据,MariaDB JDBC驱动程序完全实现[至少] MySQL驱动程序中可用的所有方法。你会没事的。
11 mysql  mariadb  jdbc 

1
Qcache_free_memory还不满,我得到了很多Qcache_lowmem_prunes
我刚刚开始涉足CMS的查询缓存。 谁能告诉我(或至少提供一个良好的猜测)为什么我得到了很多的Qcache_lowmem_prunes时候有一半以上Qcache_free_memory是免费的吗? query_cache_size=512M query_cache_limit=1M 这是大约12小时后的样子 show status like '%qcach%'; +-------------------------+-----------+ | Variable_name | Value | +-------------------------+-----------+ | Qcache_free_blocks | 10338 | | Qcache_free_memory | 297348320 | | Qcache_hits | 10254104 | | Qcache_inserts | 6072945 | | Qcache_lowmem_prunes | 725279 | | Qcache_not_cached | 2237603 | | Qcache_queries_in_cache | 48119 …

2
动态更改为innodb_flush_log_at_trx_commit
这与这个问题有关。它确实有助于为InnoDB表获得更好的性能。 根据MySQL手册,innodb_flush_log_at_trx_commit是全局动态变量。因此,我可以使用SET GLOBAL命令更改它,但它似乎正在工作。 mysql> SET GLOBAL innodb_flush_log_at_trx_commit=2; Query OK, 0 rows affected mysql> SHOW VARIABLES LIKE 'innodb_flush_log_at_trx_commit'; +--------------------------------+-------+ | Variable_name | Value | +--------------------------------+-------+ | innodb_flush_log_at_trx_commit | 2 | +--------------------------------+-------+ 1 row in set 但是,它并没有改变实际的MySQL设置。当我更新my.cnf并重新启动MySQL服务器时,它确实起作用了。因此,我不能在运行时更改全局变量吗? 我更喜欢默认值innodb_flush_log_at_trx_commit=1,但是我需要将其更改为2,然后才能运行恢复过程以使大型数据库更快地运行。但是,当过程完成后,我想将值更改回1。是否可以在运行时执行此操作? 我没有访问共享托管服务器上的my.cnf的权限。


4
MySQL InnoDB甚至在READ COMMITTED中也将主键锁定在删除状态
前言 我们的应用程序运行多个线程,这些线程DELETE并行执行查询。这些查询会影响隔离的数据,即,不可能存在并发DELETE发生在来自不同线程的同一行上。但是,对于每个文档,MySQL DELETE均对语句使用所谓的“下一个键”锁定,该锁定既锁定匹配键又锁定一些间隙。这会导致死锁,我们发现的唯一解决方案是使用READ COMMITTED隔离级别。 问题 执行DELETE具有JOINs个大表的复杂语句时会出现问题。在特定情况下,我们有一个带有警告的表,该表只有两行,但是查询需要从两个单独的INNER JOINed表中删除属于某些特定实体的所有警告。查询如下: DELETE pw FROM proc_warnings pw INNER JOIN day_position dp ON dp.transaction_id = pw.transaction_id INNER JOIN ivehicle_days vd ON vd.id = dp.ivehicle_day_id WHERE vd.ivehicle_id=? AND dp.dirty_data=1 当day_position表足够大时(在我的测试案例中有1448行),那么即使使用READ COMMITTED隔离模式的任何事务也会阻塞整个 proc_warnings表。 这个问题始终重现这个样本数据- http://yadi.sk/d/QDuwBtpW1BxB9都在MySQL 5.1(在59年1月5日检查)和MySQL 5.5(在MySQL 5.5.24检查)。 编辑:链接的示例数据还包含查询表的架构和索引,为方便起见,在此处复制: CREATE TABLE `proc_warnings` ( `id` int(11) NOT NULL AUTO_INCREMENT, …

3
使用MySQL定期对100 GB以上的表进行多向联接吗?
背景: 我创建了一个Web应用程序,希望能够合理扩展。我知道我不是Google或Twitter,但是我的应用为每个用户使用了大量的数据,因此对数据的要求很高。我想准备好合理扩展,而不必稍后重新构建所有架构。 我认为自己是软件开发人员,而不是数据库专家。这就是为什么我在这里发布。希望有更多数据库专业知识的人能给我建议。 由于用户数量相对较大,但没有Facebook号码,因此我希望拥有一个如下数据库: 一个“大桌子”: 2.5亿条记录 20列 大约100 GB的数据 具有索引的bigint(20)外键 有一个索引varchar(500)string_id列 有一个int(11)“值”列 其他4个表格: 每一千万条记录 每个约2-4 GB数据 每个表都有4-8列 一栏是datetime date_created 一列是varchar(500)string_id列 每个表中的一或两列将在联接中被选择 这些表之一用于存储平均值-其架构为bigint(20)id,varchar(20)string_id,datetime date_created和float average_value 我想做的 -两个相对昂贵的查询: 计算新的平均值: 使用外键,从大表中选择多达几百万条单独的记录。 计算新的平均值,按string_id分组。 将结果插入平均值表。 按照当前的构造,此查询使用两个联接。 为服务用户创建非规范化的只读记录: 使用外键从大表中选择1,000-40,000条记录中的任意位置。 通过字符串id列与最新记录上的其他四个表连接。 将结果插入到非规范化表中。 这些记录供前端使用以向用户显示信息。 按照当前的构造,此查询使用四个联接。 我计划在批处理后端数据库上运行所有这些昂贵的查询,这些查询会将其结果推送到处理用户请求的实时前端数据库服务器上。这些查询将定期运行。我还没有决定多久。平均查询可能每天进行一次。反规范化查询将需要更加频繁-也许每隔几分钟。 目前,这些查询中的每一个查询都在一台非常低端的计算机上的MySQL中运行,该计算机的数据集在“大表”中具有10万条记录。我既担心扩展能力,又担心扩展成本。 问题: 这种方法听起来不错吗?从全局角度看,这显然有什么问题吗? RDBMS是正确的工具,还是我应该看看Hadoop系列中的其他“大数据”解决方案?我倾向于使用RDBMS,因为数据是结构化的并且很好地适合于关系模型。但是从某种意义上说,据我了解,我可能不再能够使用RDBMS。真的吗?什么时候需要此开关? 能行吗 这些查询能否在合理的时间内运行?我可以等待几个小时来查询#1,但是查询#2应该在几分钟内完成。 从硬件角度我应该考虑什么?我的RAM和CPU瓶颈可能是什么?我认为在RAM中保留索引很重要。还有什么我应该考虑的吗? 在某个时候,我可能必须对数据进行分区并使用多个服务器。我的用例看起来已经属于该类别了,还是可以在一段时间内垂直扩展一台计算机?这样可以处理10倍的数据吗?100倍?
11 mysql  rdbms 

3
INNODB性能泄漏在哪里?
我有一个奇怪的问题,似乎无法解决。我不是服务器/数据库管理员,而是Web程序员,所以我希望这里有人可以帮助我。 情况 我正在开发一个处理很多update,insert和delete请求的系统。因此,我选择INNODB作为其行锁定功能的存储引擎。我们使用Gearman并行化在不同服务器上的工作,每10分钟更新60,000条记录。该代码在PHP中,我们正在使用Zend Framework。 问题 SQLSTATE[HY000]: General error: 1205 Lock wait timeout exceeded; try restarting transaction 我们几乎每30分钟就会从我们的一名Gearman工人那里收到上述错误。 的 mysql_report MySQL 5.1.63-0+squeeze1 uptime 15 9:52:12 Tue Sep 11 21:25:23 2012 __ Key _________________________________________________________________ Buffer used 55.00k of 16.00M %Used: 0.34 Current 2.92M %Usage: 18.24 Write hit 99.95% Read hit 100.00% __ …

1
经常查询100,000条记录的MySQL表
我有一个大约100个表的数据库,用于存储各种信息。 最重要的表是我们的订单表,该表用于存储客户的订单,截止到现在并且正在不断增长,已超过100000条记录。 该表是我们数据库中查询最多的表,用于实时订单仪表板,统计信息,分析等所需的信息的各个部分。 我会定期监视数据库,并在数据库上启用慢速查询以跟踪问题。 我每天都使用mysqltuner之类的脚本来执行查询。 我还使用mysqlsla收集有关数据库中最慢的10个查询的信息。 sample stat Count : 11.48k (30.66%) Time : 19.623758 s total, 1.709 ms avg, 239 µs to 2.475017 s max (18.64%) 95% of Time : 5.246833 s total, 481 µs avg, 239 µs to 1.095 ms max Lock Time (s) : 14.460071 s total, …

2
在所有数据库上运行SQL查询
我有一个使用cPanel和phpmyadmin的托管帐户。 我有50个数据库,都是WordPress。 我需要修改此查询,以便它遍历所有数据库以更新密码。 UPDATE'wp_users'SET'user_pass'= MD5('somepassword')WHERE'user_login'='admin'LIMIT 1; 希望找到一种可以针对所有数据库的解决方案,而不必一一遍遍。 谢谢
11 mysql  phpmyadmin 

1
InnoDB INSERT性能的功能
嗨,我正在运行Percona Server的最新版本。 服务器版本:5.5.24-55 Percona服务器(GPL),版本26.0 我有这些特征的10 cpu盒。 processor : 0 vendor_id : AuthenticAMD cpu family : 16 model : 9 model name : AMD Opteron(tm) Processor 6128 stepping : 1 microcode : 0x10000d9 cpu MHz : 800.000 cache size : 512 KB 它具有SSD和64GB RAM。Innodb大约为10GB,因此innodb_buffer_pool_size设置为10GB。 我有一张桌子,如下所示: create table TODAY ( symbol_id integer …

2
试图了解MySQL中的SHOW SLAVE STATUS
我有一个主从复制设置,看起来运行良好。下面是SHOW SLAVE STATUS命令的结果: show slave STATUS\G; *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: *.*.*.* Master_User: repliV1 Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000001 Read_Master_Log_Pos: 10726644 Relay_Log_File: mysqld-relay-bin.000056 Relay_Log_Pos: 231871 Relay_Master_Log_File: mysql-bin.000001 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: data1 Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0 Last_Error: Skip_Counter: …

6
重启服务器后,防止在Innodb数据库中重置auto_increment id
我最近读到,由于服务器重启时InnoDB如何重新计算AUTO_INCREMENT值,所以ID列表高端上的任何记录都可能重用了它们的ID。 通常,这不是问题,因为删除用户后,与ID关联的所有内容也会从其他表中删除。 但是,我故意将他们的论坛帖子保留为孤立状态,标记为“由= User#123 =“发表”,以便保留过去的对话。显然,如果ID被重用,这将是一个问题。 我以前从未遇到过此问题,因为总是有足够的新用户,因此不太可能以这种方式重复使用ID。但是,在我的新项目中,注册很少,并且频繁删除不活动的用户(尤其是因为“ Open Alpha”帐户仅持续三天作为预览),这种ID重用现在已经发生了三分之三。 我通过在其他位置保存AUTO_INCREMENT的正确值并使用它而不是依赖内部值来“解决”该问题。有实际的方法让InnoDB记住实际的上一个值吗?
11 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.