mysql - 选择数据库

标签 mysql database hibernate database-design

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

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 t 或 pt-query-digest 来找出运行时间较长的内容。 (注意:特定的超时通常表现为查询几乎花费了 50 秒。)

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

关于mysql - 选择数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35428344/

相关文章:

mysql - 如何替换mysql中列开头的特定文本?

android sqlite 删除查询不工作

mysql - 我应该将用户上传的照片存储在哪里?

java - hibernate 和继承(TABLE_PER_CLASS)

java - spring boot 集成测试中获取 org.hibernate.LazyInitializationException

mysql - SQL : Two different queries to merge

php - 准备好的语句在查询时失败

C# MySQL Blob 字段 - 无法将存储在 blob 中的 zip 文件复制到另一个表

sql - PostgreSQL:如何在数据库的每个表中添加一列?

java - 如何使用默认值初始化数据库