- 浏览: 1547787 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (532)
- 软件设计师 (7)
- PSP (5)
- NET MD (9)
- Hibernate (8)
- DIY (51)
- Work (43)
- GAME (24)
- 未分类 (44)
- iPod (6)
- MySQL (39)
- JSP (7)
- 日语能力考试 (36)
- 小说 (4)
- 豆包网 (23)
- 家用电脑 (7)
- DB2 (36)
- C/C++ (18)
- baby (9)
- Linux (13)
- thinkpad (23)
- OA (1)
- UML (6)
- oracle (24)
- 系统集成 (27)
- 脑梗塞 (6)
- 车 (8)
- MainFrame (8)
- Windows 7 (13)
- 手机 (8)
- git (12)
- AHK (2)
- COBOL (2)
- Java (9)
最新评论
-
安静听歌:
... ...
UUID做主键,好还是不好?这是个问题。 -
lehehe:
http://www.haoservice.com/docs/ ...
天气预报 -
lehehe:
[url http://www.haoservice.com/ ...
天气预报 -
liubang201010:
监控TUXEDO 的软件推荐用这个,专业,权威.并能提供报警和 ...
(转载)Tuxedo中间件简介 -
tinkame:
Next[j] =-1 当j=0时;=Max{k|0<k ...
KMP字符串模式匹配详解
对拥有一个几十万行表的 MySQL 性能优化的简单办法 | |
数据库的优化大概是在系统管理中最具有挑战性的了,因为其对人员的素质要求几乎是全方面的,好的 DBA 需要各种综合素质。在排除了操作系统,应用等引起的性能问题以外,优化数据库最核心的实际上就是配置参数的调整。本文通过一个简单的参数调整,实现了对拥有一个几十万行表的 group by 优化的例子。通过这个简单的调整,数据库性能有了突飞猛进的提升。
本例子是针对 MySQL 调整的,不像其他商业数据库,MySQL 没有视图,特别是 Oracle 可以利用固化视图来提升查询性能,没有存储过程,因此性能的调整几乎只能通过配置合适的参数来实现。
调整的具体步骤(例子针对 pLog 0.3x 的博客系统):
发现最多的 slow log 是:
SELECT category_id, COUNT(*) AS 'count' FROM plog_articles WHERE blog_id = 2 AND status = 'PUBLISHED' group by category_id;
一般在 20s 以上,甚至 30s 。
而当 blog_id=1 或者其他时,都能很快的选出结果。
于是怀疑索引有问题,重新建立索引,但无济于事。 EXPLAIN 结果如下:
mysql> EXPLAIN SELECT category_id, COUNT(*) AS 'count' FROM plog_articles WHERE blog_id = 2 AND status = 'PUBLISHED' group by category_id;
+---------------+------+------------------+------------------+---------+-------------+------+----------------------------------------------+
| table | type | possible_keys | key | key_len | ref | rows | Extra |
+---------------+------+------------------+------------------+---------+-------------+------+----------------------------------------------+
| plog_articles | ref | idx_article_blog | idx_article_blog | 5 | const,const | 4064 | Using where; Using temporary; Using filesort |
+---------------+------+------------------+------------------+---------+-------------+------+----------------------------------------------+
1 row in set (0.00 sec)
于是想到每次查看 blog_id = 2 的博客时,系统负载就提高,有较高的 swap 。于是查看 temporary table 有关的资料,果然有这样的说法:
If you create a lot of disk-based temporary tables, increase the size of tmp_table_size if you can do so safely. Keep in mind that setting the value too high may result in excessive swapping or MySQL running out of memory if too many threads attempt to allocate in-memory temporary tables at the same time. Otherwise, make sure that tmpdir points to a very fast disk that's not already doing lots of I/O.
Another problem that doesn't show up in the slow query log is an excessive use of disk-based temporary tables. In the output of EXPLAIN, you'll often see Using temporary. It indicates that MySQL must create a temporary table to complete the query. However, it doesn't tell you whether that temporary table will be in memory or on disk. That's controlled by the size of the table and MySQL's tmp_table_size variable.
If the space required to build the temporary table is less than or equal to tmp_table_size, MySQL keeps it in memory rather than incur the overhead and time required to write the data to disk and read it again. However, if the space required exceeds tmp_table_size, MySQL creates a disk-based table in its tmpdir directory (often /tmp on Unix systems.) The default tmp_table_size size is 32 MB.
To find out how often that happens, compare the relative sizes of the Created_tmp_tables and Created_tmp_disk_tables counters:
调整 tmp_table_size为 80M 左右后,以上语句 14s 即可解决。
这个参数是 DBA 很容易忽视的。
其实,不单单是数据库,就是操作系统,也是受 tmp 的影响巨大,例如安装软件到 d: 盘,如果 TMP 环境变量指向 c: 盘,而 c: 空间不够,照样可能导致安装失败。
因此让 TMP 有足够的空间可以说是计算机系统里一个普遍适用的原则(写程序也是一样)。
发表评论
-
MySQL配置文件my.cnf 例子最详细翻译
2009-07-20 11:58 1757http://www.blogjava.net/hunte ... -
MySQL :: @@Rowcount in MySQL
2009-03-02 15:39 2257@@Rowcount in MySQL? Posted ... -
MYSQL中删除重复记录的方法
2009-02-26 12:23 0MYSQL中删除重复记录的方法 2008 ... -
使用 MYSQLBINLOG 来恢复数据。
2009-02-26 12:21 0使用 MYSQLBINLOG 来恢复数据。 20 ... -
13.2.3. InnoDB Startup Options and System Variable
2009-02-20 13:37 1272http://dev.my ... -
mysql innodb 配置详解
2009-02-20 11:01 3593加为好友发送私信在线聊天 -
20.3.9 关于死锁 深入浅出MySQL——数据库开发、优化与管理维护
2009-02-20 10:50 3167深入浅出MySQL——数据库开发、优化与管理维护 回 ... -
mysql的临时表不支持自连接
2009-02-18 13:32 2372TEMPORARY TABLE ProblemsThe fol ... -
windows 下安装两个MySQL收藏
2009-02-03 16:28 2402由于两个MySQL进程需要不同的配置文件,以下所有操作均是在W ... -
1.4.1. What's New in MySQL 5.1
2009-02-03 16:25 11881.4.1. What's New in My ... -
查看mysql版本的四种方法
2009-02-02 10:57 9771:在终端下:mysql -V。 以下 ... -
Server SQL Modes
2009-02-01 11:06 14405.1.7. Server SQL Modes ... -
MySQL中的各种JOIN(CROSS JOIN, INNER JOIN, LEFT [OUTER]
2009-01-13 14:50 6228MySQL中的各种JOIN(CROSS JOIN, I ... -
[转]SQL Server 2000执行计划成本(5/5)
2009-01-09 15:26 1208[转]SQL Server 2000执行计划成本(5/5) ... -
SQL Server 2000执行计划成本(4/5)
2009-01-09 15:25 1110[转]SQL Server 2000执行计划成本(4/5) ... -
[转]SQL Server 2000执行计划成本(3/5)
2009-01-09 15:23 1540[转]SQL Server 2000执行计划成本(3/5) ... -
SQL Server 2000执行计划成本(1/5)
2009-01-09 14:52 1651[转]SQL Server 2000执行计划成本(1/5) ... -
浅谈MySQL数据库优化
2009-01-09 14:46 1352浅谈MySQL数据库优化 [收藏此页] [打印] ... -
sql server支持create table as ...建表么
2009-01-09 11:52 9051sql server支持create table as .. ... -
SQL Server如何识别自动创建的索引
2009-01-08 15:57 1323SQL Server如何识别自动创建的索引 http://w ...
相关推荐
【MySQL数据库】一条SQL语句执行慢的问题是一个复杂的议题,涉及到多个方面,包括数据库的内部机制、事务处理、索引优化以及SQL语句的设计。下面将深入解析导致SQL执行变慢的主要因素。 **一、执行偶尔变慢** 1. *...
笔者最近工作中遇见一个性能瓶颈问题,MySQL表,每天大概新增776万条记录,存储周期为7天,超过7天的数据需要在新增记录前老化。连续运行9天以后,删除一天的数据大概需要3个半小时(环境:128G, 32核,4T硬盘),而...
当查询第 10000 页的时候,查询效率急剧下降,执行时间变成了 0.16 秒,性能至少下降了几十倍。 知识点: 4. 回表查询流程:需要扫描前 10 条数据,数据量较大,比较耗时;create_time 是非聚簇索引,需要先查询出...
然而,随着业务规模的扩大,特别是当数据量增加至几十万乃至数百万条时,SQL语句的性能问题就会变得尤为突出。因此,掌握一些SQL性能优化技巧对于提升系统的整体性能至关重要。 #### MySQL慢查询日志配置与分析 ...
具体的调优策略和技术细节请参考《Mysql性能调优.docx》。 #### 四、Tomcat调参 针对Tomcat服务器的配置优化也是提升系统性能的关键步骤之一。具体的调优指南请参考《tomcat6性能调优.docx》。 #### 五、...
3. **强大的扩展性**:MySQL支持简单的水平扩展,可组成由数十至数千台服务器的集群,以应对大规模用户访问压力。 4. **代码安全性**:开源特性使得MySQL的漏洞可以迅速被发现和修复,同时源代码的开放性降低了潜在...
- **实现方式**:在表设计阶段添加一个表示删除状态的字段,通常为布尔类型或枚举类型。当需要删除某条记录时,只需修改该字段的值即可。 3. **优化索引**: - **索引选择**:合理选择索引字段,避免使用频繁更新...
如果商品评论有几十万条,这将造成几十万次回表操作,尽管每次回表在聚簇索引中查找较快,但整体耗时仍然显著。之后,对筛选出的数据进行倒序排序,再利用`LIMIT`获取第5001页的20条评论,这个过程可能需要1到2秒的...
在示例代码中,我们创建了一个`PreparedStatement`对象,预编译了SQL插入语句,然后在循环中填充参数并调用`addBatch()`将每条数据添加到批处理队列中。最后,通过`executeBatch()`一次性执行所有待插入的数据。 ...
标题中的“百万级测试数据”指的是一个包含大量条目的数据集,总计四百三十多万条。这样的数据集通常用于在软件开发过程中验证和优化应用程序的功能,确保其在处理大规模数据时能正常工作。测试数据是模拟真实世界...
4. **性能优化**:通过内核升级,Greenplum 6.0实现了高达70倍的TP性能提升,例如SELECT操作达到14万/s,INSERT达到4.6万/s,UPDATE达到2.4万/s。这得益于一系列优化措施,如AOCO(Append-Optimized Columnar)列存...
6. **优化性能**:为了处理十万级数据,还可以采取以下优化措施: - 使用索引:确保用于分页的关键字段(如ID)有合适的索引,提高查询效率。 - 缓存数据:对于不常变化的数据,可以考虑缓存结果,减少数据库访问...
标题中的“在excel的一个sheet中导出大批量数据>20万”指的是处理Excel电子表格时,涉及到大量数据(超过20万个单元格)的导出操作。在Excel中,通常20万条数据可能超过了单个工作表的推荐限制,这可能会导致性能...
DBA进阶之路是一个漫长的历程,从入门级DBA到高级甚至专家级DBA,需要逐步增强对数据库系统、操作系统、中间件等多方面知识的了解,同时还需要有扎实的运维经验和丰富的指标模型。在这个过程中,DBA需要学会如何分析...
它不仅在技术架构上具备良好的可扩展性和容错性,还在性能和可用性方面进行了大量优化,是金融领域的一个可靠选择。随着金融行业的不断进步,TDSQL也将不断地进行技术和功能上的升级,以满足更加复杂的业务场景。
在实践中优化MySQL,可以考虑诸如合理设计索引、优化查询语句、调整服务器参数、使用缓存、分区表、读写分离等方法。 设置索引但无法使用的情况通常发生在查询条件中有函数或表达式操作,或者在联合索引中,查询...
在这一版本中,SQL 执行引擎引入新的内部数据表示方式 --- `Chunk`,一个结构中保存一批数据而不仅是一行数据,同一列的数据在内存中连续存放,使得内存使用更紧凑,这样带来了几点好处:1. 显著减小了内存消耗; 2....
MySQL的`LOAD DATA INFILE`语句是一种高效的数据批量导入方法,它的性能通常是单条`INSERT`语句的几十倍,特别适用于大数据量的导入。从Mycat 1.4版本开始,它开始支持MySQL的压缩协议,这对于处理大量数据和大结果...
4. 用户规模与服务反馈:文档提到了该校园服务平台已有几十万的曝光量和两万的用户规模,这说明平台已经形成了良好的用户基础,并能以优质的服务和功能满足大学生群体的需求。这样的用户规模对于进一步完善平台功能...
Redis 的速度非常快,单机的 Redis 就可以支持每秒十几万的并发,相对于 MySQL 来说,性能是 MySQL 的几十倍。速度快的原因主要有: 1. 完全基于内存操作。 2. 使用单线程,避免了线程切换和竞态产生的消耗。 3. ...