现在,我们正在使用MySQL版本5.1.72数据库。它不是集群数据库,而是常规数据库。 64位(“使用readline 6.3的“用于sun-solaris2.11(x86_64)的mysql Ver 14.14 Distrib 5.1.72,“)使用的是专用服务器,而不是冗余云解决方案。我的经验是,我们吸引到平台的客户越多,遇到的问题就越多

2016-02-15 13:26:36,737 WARN [org.hibernate.util.JDBCExceptionReporter] - <SQL Error: 1205, SQLState: 41000>
2016-02-15 13:26:36,737 ERROR [org.hibernate.util.JDBCExceptionReporter] - <Lock wait timeout exceeded; try restarting transaction>
javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: could not insert: [com.marin.core.server.model.TableName]


切换到另一个数据库可以帮助我们吗?还是仅仅是MySQL的集群版本?有些表中有数百万行。最大的表的大小约为5 GB。它有很多索引。

最佳答案

通常这种问题是由于


索引不足。通常,这是因为为单个列建立索引,并且无法使用“复合”索引来更好地利用优势。
庞大的数据导致额外的I / O(这是任何查询的缓慢部分)。这可以通过更仔细地选择数据类型和/或规范化来补救。
效率低下的查询-某些构造已知效率低下,可以重新构造以大大提高性能。


建议您设置long_query_time=1并打开慢速日志。然后等待一天,然后运行mysqldumpslow -s tpt-query-digest找出运行时间长的内容。 (请注意:特定的超时通常表现为将近50秒的查询时间。)

然后,让我们看一下查询和SHOW CREATE TABLE,对其进行修复,并就如何避免重复出现的问题对您的用户进行教育。

10-04 10:58
查看更多