2016-02-16 130 views
0

现在我们正在使用MySQL版本5.1.72数据库。这不是一个集群数据库,而是一个普通数据库。 64位(“使用readline 6.3”for 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。它有很多指数。

回答

0

通常那样的问题是由于

  • 不足索引。通常这是因为对单列进行索引并且未能使用“组合”索引来获得更好的优势。
  • 庞大的数据导致额外的I/O(这是任何查询的缓慢部分)。这可以通过更仔细地选择数据类型和/或规范化来弥补。
  • 无效查询 - 有一些已知效率低下的构造,可以重新配置以获得性能的显着提升。

建议您设置long_query_time=1并打开缓慢日志。然后等待一天,然后运行mysqldumpslow -s tpt-query-digest以查明长时间运行的情况。 (注意:特定的超时时间通常表现为查询花费几乎50秒。)

然后让我们看看查询和SHOW CREATE TABLE,修复它们并教导用户如何避免重复出现问题。

+0

但是,如果您有一个自动增加的单列主键,它将始终有一个索引。 –

+0

只有当您具有用于查找的“id”时,该索引才有用。相反,如果你需要通过'name'获取,'id'没有用处。 –

+0

许多表都有一个复合PK,但很多都有一个自动增加的单列PK。还有一些其他单列的指标不属于PK的一部分。 –