Questions tagged «mysql»

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

2
删除带有待处理事务的MySQL表
有没有办法删除MySQL中具有待处理事务的InnoDB表或数据库(最好在文件系统级别)? 发生了什么: 我使用MySQL 5.5.28并运行LOAD DATA INFILE…将一个巨大的数据集(300M行)导入InnoDB表。我以前没用过set autocommit = 0;。不幸的是,mysqld在导入过程中被阻止了。 当我重新启动时mysql,它将尝试回滚使用以下消息填充系统日志的事务: mysqld_safe [4433]:121212 16:58:52 InnoDB:等待1个活动事务完成 问题是回滚现在已经运行了25多个小时,在此期间 mysqld不接受任何套接字连接。 我不能只是删除/var/lib/mysql/*并从头开始,因为这台机器上还有其他一些InnoDB数据库/表。但是,有问题的表是单独数据库中的唯一表。删除整个表或整个数据库不是问题,因为之后我可以重新导入所有数据。

1
MySQL表创建异常缓慢
在我的一个MySQL数据库上创建一个简单的表需要花费很多时间: mysql> CREATE TABLE blah (id BIGINT UNSIGNED NOT NULL PRIMARY KEY); Query OK, 0 rows affected (16.58 sec) 机器很空闲: 01:21:26 PM CPU %user %nice %system %iowait %steal %idle 01:21:27 PM all 0.50 0.00 0.21 0.00 0.00 99.29 任何想法如何对此进行调查? 编辑:按照DTest的建议,这是执行配置文件: mysql> SHOW PROFILE FOR QUERY 1; +----------------------+----------+ | Status | …

2
如何配置MySQL Innodb每小时处理1000次插入?
我的网站访问量很高,每小时可能会插入数千条新记录。 这个错误使网站瘫痪: PDOException: SQLSTATE[40001]: Serialization failure: 1213 Deadlock found when trying to get lock; try restarting transaction: INSERT INTO {location_instance} (nid, vid, uid, genid, lid) VALUES (:db_insert_placeholder_0, :db_insert_placeholder_1, :db_insert_placeholder_2, :db_insert_placeholder_3, :db_insert_placeholder_4); Array ( [:db_insert_placeholder_0] => 1059 [:db_insert_placeholder_1] => 1059 [:db_insert_placeholder_2] => 0 [:db_insert_placeholder_3] => cck:field_item_location:1059 [:db_insert_placeholder_4] => 1000 ) 如果MySQL无法处理这种类型的负载,我将感到非常惊讶。那么,我的问题是,这是数据库问题吗?如何配置MySQL以处理这么大的流量? …

7
MySQL索引VarChar
我试图索引blogentries数据库以获得更好的性能,但是发现了一个问题。 结构如下: CREATE TABLE IF NOT EXISTS `blogentries` ( `id_id` int(11) NOT NULL AUTO_INCREMENT, `user_id` int(11) NOT NULL, `title_id` varchar(100) COLLATE latin1_german2_ci NOT NULL, `entry_id` varchar(5000) COLLATE latin1_german2_ci NOT NULL, `date_id` int(11) NOT NULL, PRIMARY KEY (`id_id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_german2_ci AUTO_INCREMENT=271; 如下查询将正确使用索引: EXPLAIN SELECT id_id,title_id FROM blogentries ORDER …
10 mysql  varchar 

1
MySQL分区:在分区数量和每个分区的大小之间是否存在性能折衷?
我有一张大表(几亿行),我想对其进行有效的分区。我的问题是分区大小和分区数量之间是否需要权衡。据我了解,对分区中使用的列的大多数查询都将更快,因为该查询(对于大多数查询)仅需要在适用于该查询的分区中进行搜索。因此,为了最大程度地提高效率,应该将一个大表划分为最大数量的分区,从而使每个分区尽可能小。对于MySQL,这意味着1024个分区。但是拥有大量分区是否存在性能缺陷?是的,如何找到最佳的分区数? 注意:关于stackoverflow已经有一个类似的问题,但是只有一个答案(从我的角度来看)未达到要求。所以我将以自己的方式陈述这个问题...希望更清楚

4
如何在具有16 GB RAM的QuadCore机器上充分利用MySQL?
我正在工作站上运行MySQL 5.5服务器以进行科学数据分析,并想知道如何配置MySQL以便从性能方面获得最大收益。我通常运行的查询类型涉及10-20个表的联接,并且可以运行很长时间,一到几分钟也不例外。只有极少数用户同时访问数据库(最多5个用户)。我将服务器从具有2.2 GHz双核和4 GB RAM的Lenovo Thinkpad T61移到了以下具有手动选择组件的全新机器上: Intel i7 3770,4x 3.4 GHz(以4x3.7 GHz运行) Z77芯片组 16 GB DDR3 1600 RAM Windows 7 Prof 64位 Windows和MySQL服务器在Intel 520系列SSD驱动器上运行。 首次测试(在两台计算机上运行相同的查询)显示了新测试的速度有了明显的提高,但是查询仍然需要很多时间,我期望会有更多的提升。所讨论的查询已得到很好的优化,即所有表都具有适当的键,这些键也从“解释扩展”开始使用。 现在回到我当前的MySQL设置:首先,我应该提到很久以前我从MyISAM迁移到Innodb。 我的my.ini进行了一些调整(即偏离默认设置): # Maximum size for internal (in-memory) temporary tables. If a table # grows larger than this value, it is automatically converted to …

4
如何将MySQL先前的从属服务器更改为主服务器并删除从属状态信息?
我有一个主服务器->从服务器配置,其中主服务器出现故障。我已经能够将旧的从属设备重置为主机,而将旧的从属设备重置为从属设备。精细。 我似乎无法做的是删除旧的从属设备(现在是新的主设备)上的主设备信息。我知道了: mysql> show slave status \G *************************** 1. row *************************** Slave_IO_State: Master_Host: 10.1.2.101 Master_User: replicationSlave Master_Port: 3306 ... Slave_IO_Running: No Slave_SQL_Running: No 我已经阅读了很多MySQL文档,但仍然没有找到从新主服务器清除从机信息的方法。我试过了: RESET SLAVE这似乎无法清除这些设置。[[实际上,它确实删除了master.info文件,但没有删除内存设置。见下文。]] CHANGE MASTER TO MASTER_HOST='' 由于最近已弃用,因此只会产生错误。 检查my.cnf哪些没有主信息,因为它们是通过编程添加的。 RESET MASTER因为一些mysql文档推荐了它。那只会重置bin日志。 在内部MySQL表中四处查看,是否可以找到要清除的字段。 在MySQL〜5.5.9上执行此操作的正确方法是什么?谢谢你的帮助。 编辑: 因此,事实证明,RESET SLAVE该master.info文件将隐式删除@RolandoMySQLDBA。但是,在删除从属信息之前,您仍然需要重新启动服务器。 有什么方法可以删除此从属信息而不必重新启动mysqld吗?

2
防止查询等待表级锁定的方法
将客户的数据库移至其他服务器后,我们遇到了问题。这应该会对站点的性能产生积极影响,但是MyISAM中的表锁定存在问题。(我听说过使用InnoDB代替MyISAM,但是我们不能在不久的将来更改引擎)。 我们可以将其发现为更新查询,该更新查询是由主持人在文章站点上激活评论时执行的。这是过程: 更新查询已处理 SET status = 1 WHERE id = 5(已设置索引) 页面的缓存文件被删除 此时,整个页面变慢。数据库本身忙了几分钟。我几次获取进程列表,并看到了大约60个不同选择查询的条目,它们都处于等待表级锁定的状态。 1.我不理解为什么表上的此更新article_comments会影响表article等待表级锁定的选择语句。在进程列表中,几乎所有等待查询都来自该表。我已经读过一个事实,即更新/插入优先于选择,并且这可能会导致此类问题,但是当注释被激活时,articles-table本身不会被更新,因此选择不应该等待。我错过了吗? 2.除了更改为InnoDB以外,还可以采取其他措施来防止此行为或至少获得更好的平衡吗?对于将数据库移动到新服务器之前没有出现此问题,我感到非常恼火。我猜有一些配置错误,但我不知道如何识别。

1
为什么全文搜索返回的行少于LIKE
我没有像我想要的那样进行全文搜索,而且我不了解结果列表中的差异。 语句示例: SELECT `meldungstext` FROM `artikel` WHERE `meldungstext` LIKE '%punkt%' 返回92行。我收到具有匹配项的行,例如,在列meldungstext中显示“ Punkten”,“ Zwei-Punkte-Vorsprung”和“ Treffpunkt”。 我在“ meldungstext”列上设置了全文索引,并尝试了以下操作: SELECT `meldungstext` FROM `artikel` WHERE MATCH (`meldungstext`) AGAINST ('*punkt*') 这仅返回8行。我只会收到与“ Punkt”本身匹配的行,或者与“ i-Punkt”一样被视为“ Punkt”的单词。 然后,我尝试了布尔模式: SELECT `meldungstext` FROM `artikel` WHERE MATCH (`meldungstext`) AGAINST ('*punkt*' IN BOOLEAN MODE) 返回44行。我收到在meldungstext列中包含“ Zwei-Punkte-Vorsprung”或“ Treffpunkt”的行,但没有包含“ Punkten”的行。 为什么会发生这种情况?如何设置“完全”的全文搜索,以防止在子句中使用LIKE'%%'?

2
如何判断MySQL中是否使用索引进行排序?
我有一个带有ORDER BY子句的查询,该子句使用一列,该列是WHERE子句中使用的索引的最后一列,本质上是以下形式: SELECT cols FROM tables WHERE col_1 = x AND col_2 = y AND col_3 = z ORDER BY col_4 并按此顺序在列(col_1,col_2,col_3,col_4)上创建索引。 当我分析查询时,超过99%的时间用于“排序结果”状态。如果有区别,col_4是一个时间戳列。我了解到ORDER BY只能在某些情况下使用索引,但是对于优化器何时才能使用它仍然有些困惑。
10 mysql  index  sorting 

2
我可以让一个表成为另一个的“别名”或“符号链接”吗?
我有两个具有相同结构的表A和B。编写了某个应用程序,因此它始终将相同的数据写入两个表。 与一位同事讨论了节省驱动器空间的潜力之后,我想知道mysql或postgresql是否可以在表上创建另一个的“别名”或“符号链接”。 我希望该行为与软文件符号链接的行为非常相似;从symlink本身或其目标读取将产生相同的输出,而对其中一个写入将更新目标。
10 mysql  postgresql 

3
如何在InnoDB引擎中使用插入延迟,并减少插入语句的连接?
我正在开发一个涉及大量数据库写入,大约70%插入和30%读取的应用程序。这个比率还将包括我认为是一次读取和一次写入的更新。通过插入语句,多个客户端通过以下插入语句将数据插入数据库: $mysqli->prepare("INSERT INTO `track` (user, uniq_name, ad_name, ad_delay_time ) values (?, ?, ?, ?)"); 问题是我应该使用insert_delay还是使用mysqli_multi_query机制,因为insert语句使用服务器上的〜100%cpu。我在数据库上使用InnoDB引擎,因此无法进行延迟插入。在服务器上的插入速度为〜36k / hr,读取率为99.89%,我也使用select语句在单个查询中检索了7次数据,该查询在服务器上执行需要150秒。我可以使用哪种技术或机制执行此任务?我的服务器内存为2 GB,我应该扩展内存吗?看看这个问题,任何建议都会感激我。 表的结构: +-----------------+--------------+------+-----+-------------------+----------------+ | Field | Type | Null | Key | Default | Extra | +-----------------+--------------+------+-----+-------------------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | user | …

2
MySQL在创建表为SELECT时锁定
我正在运行以下(虚拟)查询 CREATE TABLE large_temp_table AS SELECT a.*, b.*, c.* FROM a LEFT JOIN b ON a.foo = b.foo LEFT JOIN c ON a.bar = c.bar 假设查询需要10分钟才能运行。在表a,b或c运行时尝试更新它的值将等待上面的查询首先完成。我想避免这种锁定(数据一致性不重要)。我该如何实现? 使用:MySQL 5.1.41和InnoDB表 ps SET事务隔离级别读取未提交;行为无变化 更新 在执行查询时,SHOW ENGINE INNODB STATUS的输出如下(我在这里故意进行了非常慢的查询) ===================================== 120323 15:26:29 INNODB MONITOR OUTPUT ===================================== Per second averages calculated from the last 8 …
10 mysql  locking  ctas 

2
在Debian上对单个MySQL查询使用多个内核
我正在将MySQL服务器运行在Debian作为来宾OS的VM(VMWare)上进行测试。来宾系统具有四个模拟的CPU内核,因此我将thread_concurrency设置为四个。 我正在大型表上进行昂贵的联接,这可能需要花费几分钟,但是我在客户机操作系统上看到,一次只使用一个核心。无论涉及的表使用了什么存储引擎(都已通过MyISAM和InnoDB测试),都会发生这种情况。另外,在执行这些大查询时,整个数据库似乎被阻塞,我无法并行执行任何其他查询。奇怪的是,htop显示,查询的核心在查询运行期间发生了变化! 为什么会这样? 这是来自的相关条目SHOW FULL PROCESSLIST;(没有其他查询): | 153 | root | localhost | pulse_stocks | Query | 50 | Copying to tmp table | SELECT DISTINCT * FROM `pulse_stocks`.`stocks` sto, `pulse_new`.`security` sec WHERE (sto.excntry = sec.excntry AND sto.stock_id = sec.ibtic) OR ( sto.isin = sec.isin AND sto.isin <> "" AND …


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.