- 浏览: 22054 次
- 性别:
- 来自: 南京
最新评论
业务背景:
随着业务发展,单表的数据量已达实际应用推荐的极限,继续增加可能会性能瓶颈,考虑到后续业务发展,必须把现有数据按比例拆分到多张分表,这样变相地提高了单表容量。
分表性能关注:
分表索引数据的读取比较频繁,需要考虑使用缓存机制,以及定期更新缓存的机制,减少单表压力,提高性能。
批量操作时如果涉及到多个分表的读写,应该顺序执行,减少数据库的并发请求。同时业务系统应该关注批量查询的时间段,减少无意义的大范围查询功能。
分表测试方案设计:
压测场景 (单表铺底500w)
单条数据插入:A表
单条按主键查询,数据集中在同一张分表:A表
单条按主键查询,数据分散在不同分表:A表
单条按条件查询,数据集中在同一张分表:A表
单条按条件查询,数据分散在不同分表:A表
单条按主键修改:B表
单条按条件修改:B表
单条按主键删除:B表
批量数 据插入:C表 x1000
按条件查询列表,数据集中在同一张 分表:C表
按条件查询列表,数据分散在不同分 表:C表
按条件更新多条记录:C表
开启事务时,多次单条数据插入:A表
开启事务时,多次批量数据插入:D表
开启事务时,多次单条按主键修改: E表
过程中发现问题及优化方法:
统计信息
同样的表,同样的条件,同样的索引,为何出现如此不稳定的数据?
数据量增长了20%!!!
需要从新收集统计信息。
统计信息的重要性:
为了执行查询或 DML 语句(INSERT、UPDATE、DELETE),DB2 必须创建一个访问计划(access plan)。访问计划定义按什么顺序访问表,使用哪些索引,以及用何种连接(join)方法来关联数据。好的访问计划对于 SQL 语句的快速执行至关重要。DB2 优化器可以创建访问计划。这是一种基于成本的优化器,这意味着它是根据表和索引的相关统计信息来作出决策的。
收集统计信息-runstats
runstats on table [模式名].[表名] with distribution and detailed indexes all
注意:你可以在所有列上,或者仅仅在某些列或列组(除了LONG和LOB列)上执行RUNSTATS。如果没有指定特定列的子句,系统则会使用默认的ON ALL COLUMNS子句。
如果为单一索引进行runstats,可以使用:runstats on table [模式名].[表名] for indexes [索引名]
一个SQL在写完并运行之后,其实我们只是告诉了DB2去做什么,而不是如何去做。而,具体的如何去做,就取决于优化器。优化器为了生成最优的执行计划,就得掌握当前的系统信息,目录中的统计信息等等。runstats命令就是用来收集数据库对象的状态信息,这对优化器生成最优的执行计划至关重要。
什么时候需要runstats?
1.给表创建一个index后,我们最好做一次runstat,否则可能index没有生效
2.对table做了一次reorg后,记得要做一次runstats
3.表里数据发生了比较大的变化,一般来说,大约表里面的数据量的10%-20%发生了变化,就应该作一次runstats
4.当你在分区(DPF)数据库里面使用了REDISTRIBUTE DATABASE PARTITION GROUP这个命令,那么就需要用runstats来收集新的统计信息
执行了runstats的效果。
执行前
执行后
如何优化执行计划:
1.适当的runstats和reorg
2.尽量使用索引条件
3.在sql中仅选择需要的列
4.调整where条件
在 DB2 优化器中使用分布统计信息的原文出处:http://www.ibm.com/developerworks/cn/data/library/techarticles/dm-0606fechner/
随着业务发展,单表的数据量已达实际应用推荐的极限,继续增加可能会性能瓶颈,考虑到后续业务发展,必须把现有数据按比例拆分到多张分表,这样变相地提高了单表容量。
分表性能关注:
分表索引数据的读取比较频繁,需要考虑使用缓存机制,以及定期更新缓存的机制,减少单表压力,提高性能。
批量操作时如果涉及到多个分表的读写,应该顺序执行,减少数据库的并发请求。同时业务系统应该关注批量查询的时间段,减少无意义的大范围查询功能。
分表测试方案设计:
压测场景 (单表铺底500w)
单条数据插入:A表
单条按主键查询,数据集中在同一张分表:A表
单条按主键查询,数据分散在不同分表:A表
单条按条件查询,数据集中在同一张分表:A表
单条按条件查询,数据分散在不同分表:A表
单条按主键修改:B表
单条按条件修改:B表
单条按主键删除:B表
批量数 据插入:C表 x1000
按条件查询列表,数据集中在同一张 分表:C表
按条件查询列表,数据分散在不同分 表:C表
按条件更新多条记录:C表
开启事务时,多次单条数据插入:A表
开启事务时,多次批量数据插入:D表
开启事务时,多次单条按主键修改: E表
过程中发现问题及优化方法:
统计信息
同样的表,同样的条件,同样的索引,为何出现如此不稳定的数据?
数据量增长了20%!!!
需要从新收集统计信息。
统计信息的重要性:
为了执行查询或 DML 语句(INSERT、UPDATE、DELETE),DB2 必须创建一个访问计划(access plan)。访问计划定义按什么顺序访问表,使用哪些索引,以及用何种连接(join)方法来关联数据。好的访问计划对于 SQL 语句的快速执行至关重要。DB2 优化器可以创建访问计划。这是一种基于成本的优化器,这意味着它是根据表和索引的相关统计信息来作出决策的。
收集统计信息-runstats
runstats on table [模式名].[表名] with distribution and detailed indexes all
注意:你可以在所有列上,或者仅仅在某些列或列组(除了LONG和LOB列)上执行RUNSTATS。如果没有指定特定列的子句,系统则会使用默认的ON ALL COLUMNS子句。
如果为单一索引进行runstats,可以使用:runstats on table [模式名].[表名] for indexes [索引名]
一个SQL在写完并运行之后,其实我们只是告诉了DB2去做什么,而不是如何去做。而,具体的如何去做,就取决于优化器。优化器为了生成最优的执行计划,就得掌握当前的系统信息,目录中的统计信息等等。runstats命令就是用来收集数据库对象的状态信息,这对优化器生成最优的执行计划至关重要。
什么时候需要runstats?
1.给表创建一个index后,我们最好做一次runstat,否则可能index没有生效
2.对table做了一次reorg后,记得要做一次runstats
3.表里数据发生了比较大的变化,一般来说,大约表里面的数据量的10%-20%发生了变化,就应该作一次runstats
4.当你在分区(DPF)数据库里面使用了REDISTRIBUTE DATABASE PARTITION GROUP这个命令,那么就需要用runstats来收集新的统计信息
执行了runstats的效果。
执行前
执行后
如何优化执行计划:
1.适当的runstats和reorg
2.尽量使用索引条件
3.在sql中仅选择需要的列
4.调整where条件
在 DB2 优化器中使用分布统计信息的原文出处:http://www.ibm.com/developerworks/cn/data/library/techarticles/dm-0606fechner/
发表评论
-
netstat当我们系统有问题的时候,我们不要急于去调查我们代码,这个毫无意义。我们首要需要看的是操作系统的报告。
2015-11-11 09:43 0http://blog.aliyun.com/896?spm= ... -
Code - 60990 Error: Two Way Communication Error: Function two_way_comm_post_mess
2015-09-14 10:28 693参考:http://www.blogjava.net/qile ... -
压力机疲劳
2015-09-10 16:31 6365个用户,使用一台压力机 5个用户,使用五台压力机 ... -
think_time
2015-09-09 15:56 0loadrunnerjava脚本,使用thinktime。 例 ... -
参数化
2015-09-07 18:40 476我这里写下参数类型为file的 Select Next R ... -
loadrunner 日志打印
2015-09-07 11:29 1011参考: http://bbs.51testing.com/th ... -
应用日志对压测的影响
2015-09-06 12:03 6091.AIX小机 压测CPU的sys请求过多 尝试调整日志级 ... -
利用loadrunner代理方式,录制手机客户端脚本
2015-09-02 15:57 2488需要保证手机终端和电脑在同一无线网络内,手机终端可以通过代理将 ... -
sql句柄用尽,在请求数据库全部报错
2015-08-21 14:10 0execute read lnsprdinfo error!s ... -
hessian接口公司逐渐用ssf去替代它了
2015-08-19 17:13 0hession接口脚本 import lrapi.lr; ... -
关联小结
2015-08-19 14:41 651关联:从响应消息中取出我们需要的字段值。 每一次执行时都会变动 ... -
403Forbidden 防火墙拦截
2015-08-18 14:35 11761.小压力跑场景不到1MIN,请求消息都返回失败。 报抓关 ... -
运行时报错:network buffer size带宽问题
2015-08-17 10:20 1022运行时报错: Action.c(8): Error -2660 ... -
杂待分类1
2015-08-10 18:11 01、进程与线程 进程是程序执行时的一个实例,即它是程序已经执行 ... -
同一action,响应时间不一致(回放>场景压测)
2015-08-07 14:24 952同一脚本,响应时间不一样(回放VS场景压测) 回放过程中事务 ... -
回放慢(仅web协议,java正常)
2015-08-06 11:39 532我用loadrunner11.0录制B/S模式的 ... -
响应时间(max & min)
2015-08-04 20:46 1050MAX Response time java脚本, ... -
压测分析1
2015-08-04 20:24 0增加用户无法增加TPS,响应时间较长,系统资源消耗较少。 增加 ... -
This Vuser already started a transaction with the same name, and has not yet
2015-08-04 19:06 1119压测执行报错:This Vuser already start ... -
webservice 报文post传递
2015-07-23 11:41 1115http接口报文如何发送 ...
相关推荐
### 数据库极限性能测试知识点详解 #### 一、引言 在2009年系统架构师大会上,邵宗文的演讲《数据库极限性能测试修正版》深入探讨了数据库性能测试的重要性和具体实施方法。本篇文章将根据演讲的标题、描述、标签...
在互联网公司中,数据库性能测试是确保系统稳定、高效运行的关键环节。生产环境数据库的性能测试涉及多个层面,包括但不限于数据库设计、查询优化、硬件配置、并发处理能力以及故障恢复策略。下面将详细阐述这些重要...
分库分表是解决大数据量时性能瓶颈的一种常见策略,它可以将大量数据分散到多个数据库或表中,以减轻单个数据库的压力,提高查询效率。 【MyCat核心知识点】 1. **MyCat架构**:MyCat作为数据库中间件,其核心功能...
在IT行业中,数据库分表是一种常见的优化策略,用于解决大数据量和高并发场景下的性能问题。本示例主要探讨了如何使用Java实现分表,并且提供了SQL文件作为辅助理解。以下将详细介绍Java分表的基本概念、重要性以及...
1. **性能测试**:通过导入这30W条数据,可以测试MySQL在高并发读写、复杂查询等方面的表现。例如,查看索引的建立是否合理,是否能有效提高查询速度;检查数据库的内存配置是否满足大数据量操作的需求;评估查询...
### 《软件性能测试、分析与调优实践之路-第二版》PPT课件总结 #### 一、软件性能测试的重要性及目标 1. **理解系统性能指标**: - **并发访问量**:评估系统在高并发环境下的承载能力。 - **平均响应时间**:...
首先,进行数据库性能测试的原因有三个层次:一是大致预估所需的硬件资源;二是规划数据库的分库分表策略;三是通过测试发现性能瓶颈,优化架构。对于MySQL而言,MyISAM引擎通常适用于写少读多的互联网业务,因为它...
课程首先介绍了分库分表的背景,包括 MySQL 数据库架构演变历史以及业务增长下数据库性能优化思路。接着深入探讨了分库分表的各种方式,如垂直分表、垂直分库、水平分表和水平分库,并对其进行了总结。还讲解了 ...
4. **测试与优化**:对分库分表后的系统进行性能测试,根据测试结果进行优化调整。 本案例提供的源码可以帮助你深入理解分库分表和读写分离的实现细节,对于提升数据库设计和优化技能大有裨益。你可以通过研究源码...
2. **分库分表**:当单个数据库无法承载大量数据或高并发访问时,我们需要将数据分散到多个数据库或表中,以降低单表压力,提高系统性能。分库是将数据分散到多个数据库,分表是在单个数据库内将一个大表拆分成多个...
分库分表是数据库扩展的一种策略,通过将数据分散到多个数据库或表中,以减轻单一数据库的压力,提高系统的并发处理能力和整体性能。分库是将数据按照一定的规则分配到不同的数据库中,分表则是将一个大表拆分成多...
5. **高性能**:经过严格的性能测试,Sharding-JDBC在单库查询时的QPS达到了原生JDBC的99.8%,而在双库查询时的QPS相比单库增加了94%,显示出极高的性能优势。 6. **轻量级与便捷部署**:作为一个轻量级的Java框架...
Java 分库分表是一种在大数据量场景下优化数据库性能的技术,它通过将单一的大表分成多个小表,分散存储在不同的数据库中,从而降低单表数据量,提高查询效率,减轻数据库的压力。在这个"java分库分表源码"项目中,...
在IT行业中,数据库分表是一种常见的优化策略,用于解决大数据量带来的性能问题。本文将深入探讨如何使用Hibernate作为ORM框架,结合Spring,实现一个自定义的分表插件。这个插件提供了一种灵活的策略定义方式,适用...
综上所述,这个压缩包文件可能包含了一个使用Mycat、MySQL和JDBC实现的分库分表示例代码,以及相关的性能测试代码。学习这个案例可以帮助理解如何在实际项目中利用这些技术提高数据库系统的扩展性和性能。
分库分表是数据库水平扩展的一种常见策略,用于解决单表数据量过大导致的性能问题。随着业务的增长,数据量可能会急剧增加,单个数据库无法高效处理,这时就需要将数据分散到多个数据库或表中,以降低单表的数据量,...
而当项目发展到一定规模,数据库的扩展性和性能优化就显得尤为重要,分库分表技术应运而生。本Demo主要展示了如何结合Java、Spring Boot以及JPA实现一个分库分表的解决方案。 首先,我们要理解什么是JPA(Java ...
通过学习和理解这个"sharding-jdbc按月分表样例",开发者可以了解到如何利用Sharding-JDBC实现动态分表,优化数据库性能,同时也能掌握Sharding-JDBC的基本使用方法,为实际项目中的数据分片提供参考。
在IT行业中,数据库分表是解决大数据量存储和查询性能问题的一种有效策略。Spring和MyBatis作为两个非常流行的Java开发框架,它们在企业级应用中广泛应用。而Shardbatis则是一个专门针对Spring和MyBatis设计的分库...