我有一个几乎从不查询的数据包日志数据库。它只需要快速插入即可。我使用 InnoDB 是因为我想保持 ACID 合规性,因为即使丢失一个数据包也可能对我们的客户造成损害。在性能调优方案中,我通过多个数据库连接向服务器发送 1,000,000 个数据包。但是无论我在 my.cnf 中使用什么设置,我都无法让 mysqld 进程在 12 核的系统上使用超过 900% 的 CPU。(盒子上没有其他东西在运行。)
我设置了以下内容
innodb_file_per_table = 1
innodb_write_io_threads = 64
innodb_read_io_threads = 64
innodb_thread_concurrency = 0
如果我使用 MyISAM,我可以在大约 6 秒内写入所有数据包。但是 InnoDB 大约需要 25。我可以让 MySQL 使用剩余的系统资源并更快地插入吗?
编辑:这是表的架构:
+-------+----------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------------------+------+-----+---------+-------+
| t | bigint(20) unsigned | YES | | NULL | |
| a | char(1) | YES | | NULL | |
| sa | …
Run Code Online (Sandbox Code Playgroud) 我正在将单个 MySQL 数据库(约 10GB 未压缩)从一台服务器移动到同一网络上的另一台服务器。当前 MySQL 版本是5.1.41
,新版本是5.5.24
. 该数据库包含 MyISAM 和 InnoDB 表。是否可以使用这种方法:
/data
目录从旧服务器复制到新服务器我意识到这个基本问题之前可能已经被问过 1000 次,但我见过的大多数问题都没有提到更改版本并支持 MyISAM 和 InnoDB。
我在 MySQL 5.0.15 上创建了一个数据库。我有一个查询,当我在这个 MySQL 版本上运行这个查询时,我得到 0.9 秒的运行时间。当我将此数据库导入到另一个具有相同硬件的 MySQL 服务器并运行相同的查询时,我得到了 120 多个,有时 MySQL 挂起。
5.0 和 5.1 或 5.5 有什么区别?我已经测试了 5.1 和 5.5 版本。
在较新版本中查询是否可能需要更长的时间(例如 mysql 结构更改)?
对不起,我不能把这个查询放在这里,但查询是这样的:
SELECT fl_passenger_ticket. *,
fl_aganc.name AS agancname,
fl_pnr.remark AS remark,
fl_pnr.reservetime AS reservetime,
fl_pnr.cancelpnr,
fl_flight_date.fromcity AS fromcity,
fl_flight_date.tocity AS tocity,
fl_flight_date.flightdate AS flightdate,
fl_flightdate_capacity.adultper AS adultper,
fl_flightdate_capacity.childper AS childper,
fl_flightdate_capacity.infantper AS infantper,
fl_flightdate_capacity.cancel AS cancelsegment,
fl_flightdate_capacity.tax1adultpric,
fl_flightdate_capacity.tax1childpric,
fl_flightdate_capacity.tax1infantpric,
fl_flightdate_capacity.tax2adultpric,
fl_flightdate_capacity.tax2childpric,
fl_flightdate_capacity.tax2infantpric,
( fl_flightdate_capacity.tax3adultpric +
fl_flightdate_capacity.tax4adultpric +
fl_flightdate_capacity.tax5adultpric ) AS taxxtadultpric,
( fl_flightdate_capacity.tax3childpric + …
Run Code Online (Sandbox Code Playgroud) 我很困惑我应该选择哪个 mysql 引擎(让我们谈谈最常用的:MyISAM 和 InnoDB)。
理论说:
当我创建一个表时,如果我想保持完整性并且我想加快通过“文本”进行搜索的查询,我应该总是牺牲一些东西吗?
如果需要,您如何决定使用哪种引擎
很抱歉这篇很长的帖子,但我必须提供尽可能多的信息,以使这个非常模糊的问题更加具体。
我的项目的目标是让用户搜索各种产品的(巨大)数据库。
最常见的用例是:
我有三个主要表“产品”、“功能枚举”和“功能”。让数据输入用户为产品即时创建新的“功能”非常重要 - 因此我使用 EAV(反)模式。
以下是表的结构:
'products'
ID(PK), TITLE, CATEGORY
(Indexed by CATEGORY)
'features_enum'
ID(PK), TITLE
'features'
P_ID, F_ID, VAL
(Indexed by P_ID and then F_ID)
Run Code Online (Sandbox Code Playgroud)
我的主要搜索查询的示例格式:
SELECT
p.ID,
p.TITLE PROD_TITLE,
fe.TITLE FEATURE_TITLE,
f.VAL
FROM
products p, features f, features_enum fe
WHERE
p.CATEGORY = 57 AND
p.ID = f.P_ID AND
f.F_ID = fe.ID AND
(
(f.F_ID = 1 AND f.VAL = 'Val1') AND
(f.F_ID = …
Run Code Online (Sandbox Code Playgroud) 我计划在 CentOS 6.5 机器上运行我的 MySQL DB ver5.1.73 到 MySQL 5.6.21。
我根据我在 StackOverflow 上阅读的内容了解了此操作的基本过程,但我很好奇是否有人在使用 5.1 到 5.6 路线时遇到任何特定问题?
我听说过的一个是某些 TIMESTAMP 列可能会以不正确的时间戳结束。但我很好奇是否还有其他人听说过或遇到过的。
为了缩小我关心的问题,我只关心可能存在数据丢失或一致性问题的任何事情
谢谢!是
我正在探索 MySQL 5.5.18 版中不同数据库引擎的效率,以查看哪个最适合与 500 万行数据集的范围查询一起使用:
SELECT P.col1, P.col2, P.col3, P.col4, P.col5, P.col6, P.col7, P.col8, P.col9
, P.col10, P.col10 * R.col3 as 'combi'
FROM PRODUCT P INNER JOIN RATE R ON R.col2 = P.col2
WHERE P.col3 = 'y'
AND P.col4 >= 1000
AND P.col5 >= 5
AND P.col6 BETWEEN 10 AND 100
AND P.col7 >= 0
AND P.col8 >= 7
AND P.col9 >= NOW()
AND P.col10 * R.col3 BETWEEN 50 AND 80
ORDER BY P.col8 DESC LIMIT 100;
Run Code Online (Sandbox Code Playgroud)
基于对Stackoverflow 的 …
我们的旧数据库是 MySQL 5.1 服务器,已经有四年的历史了。如果我卸载 MySQL 5.1 Server 并安装最新版本并恢复备份,我会获得性能优势吗?我猜新版本发布说有很多性能优势。
我有一个继承的 MySQL 数据库的问题。mysqld 有时会使用高达 2300% 的 CPU。唯一的解决方案是服务 mysql stop 并在表上运行 myisamchk -r。修复索引后,我启动 MySQL,一切正常。
关于永久解决方案的任何想法?
编辑(来自评论):
使用 5.5.29-0ubuntu0.12.04.2-log
key_buffer = 16M max_allowed_packet = 16M 线程堆栈 = 128K 线程缓存大小 = 8 myisam-recover = 备份 最大连接数 = 500 #table_cache = 512 #thread_concurrency = 10 query_cache_limit = 1M query_cache_size = 16M
SELECT SUM(index_length) ndxsize
FROM information_schema.tables
WHERE engine='MyISAM'
Run Code Online (Sandbox Code Playgroud)
返回
+-----------+ | ndxsize | +-----------+ | 59862016 | +-----------+
SELECT SUM(data_length+index_length)/power(1024,2) datndxsize
FROM information_schema.tables
WHERE engine='MyISAM'
Run Code Online (Sandbox Code Playgroud)
返回:
+--------------------+ | 数据大小 | +--------------------+ | 488.69915199279785 | …