返回顶部
首页 > 资讯 > 数据库 >SQL调优怎么生成海量测试数据
  • 140
分享到

SQL调优怎么生成海量测试数据

2024-04-02 19:04:59 140人浏览 安东尼
摘要

小编给大家分享一下sql调优怎么生成海量测试数据,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!场景,如果出现慢SQL,需要DBA

小编给大家分享一下sql调优怎么生成海量测试数据,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

场景,如果出现慢SQL,需要DBA加索引优化,怎么知道加的索引是有效的呢?这需要一遍遍的试验和调整,总不能直接拿线上的数据库测试吧,一般方法是在测试环境建立测试表,然后从线上的从库拷贝一些数据进测试环境,接着再进行加索引和explain

但有时候,导出的数据量少,执行计划看不出效果,导出数据量多,又会冲刷线上机器的buffer pool和影响io,如果有个工具能够直接生成数据就好了,生成跟线上一样的100万,或者1000万就好了

以前sysbench压力测试,有一个生成数据的功能,生成100万数据是这样的

sysbench --test=oltp --Mysql-table-engine=myisam --oltp-table-size=1000000 \
--mysql-Socket=/tmp/mysql.sock --mysql-user=test --mysql-host=localhost \
--mysql-passWord=test prepare

但它生成表结构是固定的,进行压力测试的SQL语句也是固定的,无法调试线上的SQL语句

CREATE TABLE `sbtest` (
 `id` int(10) unsigned NOT NULL auto_increment,
 `k` int(10) unsigned NOT NULL default '0',
 `c` char(120) NOT NULL default '',
 `pad` char(60) NOT NULL default '',
 PRIMARY KEY (`id`),
 KEY `k` (`k`));

能否有一个创建用户自定义的表结构,并且对这个表结构生成上百千万数据的工具呢?有一个叫datagen的工具,链接在文章末尾

drwxr-xr-x. 2 root mysql     4096 Sep 27  2016 bizsql
drwxr-xr-x. 2 root mysql     4096 May 31 20:51 conf
-rw-r--r--. 1 root mysql 23698092 Sep 27  2016 datagen.jar
-rwxr-xr-x. 1 root mysql      147 Sep 27  2016 datagen.sh
-rw-rw-r--. 1 root mysql    31599 May 31 20:54 envbuilder.log
-rw-r--r--. 1 root mysql     1741 May 31 20:53 example.schema
-rw-r--r--. 1 root mysql     1336 May 31 09:42 example.schema_backup
-rw-r--r--. 1 root mysql     2062 Sep 27  2016 readme

方法很简单的2步,把你想要的表结构和想要生成多少条数据,写入到example.schema文件,比如这样,如果想要生成100万条数据,在表末尾加入注释

CREATE TABLE `test`.`tbl_test` (
`post_id` BIGINT(20) DEFAULT '0'  ,
`star` INTEGER(10) DEFAULT '0'  ,
`view_count` INTEGER(11) DEFAULT '0'  ,
`bean` INTEGER(11) DEFAULT '0'  ,
`nearby` INTEGER(11) DEFAULT '0'  ,
PRIMARY KEY (post_id) ,
INDEX (poster_uid)
) COLLATE='utf8mb4_general_ci' ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ;

第2步,填写连接测试数据库的账号密码,只需要加入一行

<property name="obURL" value="jdbc:mysql://数据IP:数据库端口/数据库名字?user=用户名&amp;password=密码"/>
vi conf/datagen.xml 
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="Http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
        classpath:org/springframework/beans/factory/xml/spring-beans-2.5.xsd">    
        <bean id="datagen" class="com.alipay.obmeter.tools.DataGen">
           <property name="obURL" value="jdbc:mysql://数据IP:数据库端口/数据库名字?user=用户名&amp;password=密码"/>
                 
           <property name="inputDDL" value="example.schema"/>
           <property name="rowCountPerTable" value="1000000"/>
           <property name="maxThreadCountPerTable" value="20"/>
           <property name="maxThreadCount" value="20"/>
           <property name="dropTableFirst" value="true"/>
           <property name="needFreeze" value="false"/>
           <property name="staticRatio" value="1.0"/>
        </bean>
</beans>

接着运行shell脚本,往测试库建表,插入数据

[root@localhost datagen]# /bin/bash datagen.sh

[2017-05-31 08:53:15][WARN ] [DataGen :184] - Parsing ddl...
[2017-05-31 08:53:15][WARN ] [DataGen :187] - Creating table...
[2017-05-31 08:53:15][WARN ] [MultiThreadPrepareDataComparator:508] - Preparing generators...
[2017-05-31 08:53:15][WARN ] [MultiThreadPrepareDataComparator:510] - Generating dynamic data...
[2017-05-31 08:54:34][WARN ] [MultiThreadPrepareDataComparator:526] - Generate done.

在测试库,就会出现100万条数据了

mysql> select count(*) from test.tbl_test;
+----------+
| count(*) |
+----------+
|  1000000 |
+----------+
1 row in set (0.16 sec)

现在就可以加索引,explain线上真实的SQL语句了

mysql> explain select post_id  from test.tbl_test where post_type <> 1 and check_status = 9 and flag = 1 and post_time < 1496178301 order by post_time asc limit 200; \G
+----+-------------+----------+-------+---------------+-----------+---------+------+--------+-------------+
| id | select_type | table    | type  | possible_keys | key       | key_len | ref  | rows   | Extra       |
+----+-------------+----------+-------+---------------+-----------+---------+------+--------+-------------+
|  1 | SIMPLE      | tbl_test | range | post_time     | post_time | 9       | NULL | 501491 | Using where |
+----+-------------+----------+-------+---------------+-----------+---------+------+--------+-------------+
1 row in set (0.00 sec)
ERROR: 
No query specified

加索引

mysql>  alter table test.tbl_test add index idx_f(check_status,flag,post_type,post_time);           
Query OK, 0 rows affected (4.45 sec)
Records: 0  Duplicates: 0  Warnings: 0

再来一次explain,扫描50万行变2行

mysql> explain select post_id  from test.tbl_test where post_type <> 1 and check_status = 9 and flag = 1 and post_time < 1496178301 order by post_time asc limit 200; \G
+----+-------------+----------+-------+-----------------+-------+---------+------+------+------------------------------------------+
| id | select_type | table    | type  | possible_keys   | key   | key_len | ref  | rows | Extra                                    |
+----+-------------+----------+-------+-----------------+-------+---------+------+------+------------------------------------------+
|  1 | SIMPLE      | tbl_test | range | post_time,idx_f | idx_f | 15      | NULL |    2 | Using where; Using index; Using filesort |
+----+-------------+----------+-------+-----------------+-------+---------+------+------+------------------------------------------+
1 row in set (0.00 sec)

等调试好索引以后,确定能优化SQL以后,再往线上环境去加索引

当然还有一些很强大的功能

比如某个字段,只出现规定的几个值,比如状态status字段0,1,2,以及每个状态出现的概率

比如模拟线上的用户UID,可以限制某个字段随机数的范围,从00000001到899999999之间等

以上是“SQL调优怎么生成海量测试数据”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网数据库频道!

您可能感兴趣的文档:

--结束END--

本文标题: SQL调优怎么生成海量测试数据

本文链接: https://lsjlt.com/news/67029.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • SQL调优怎么生成海量测试数据
    小编给大家分享一下SQL调优怎么生成海量测试数据,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!场景,如果出现慢SQL,需要DBA...
    99+
    2024-04-02
  • SQL Server中怎么生成测试数据
    本篇内容介绍了“SQL Server中怎么生成测试数据”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!简介在...
    99+
    2024-04-02
  • 生成大量测试数据脚本
    生成大量数据来测试: create table t1 (id int not null primary key auto_increment,age int,name varchar(20),cr...
    99+
    2024-04-02
  • mysql 生成测试数据
    1. 创建database create database test; 2. 创建数据表 字段类型: id : 编号uname: 用户名ucreatetime : 创建时间age : 年龄 CREATE...
    99+
    2024-04-02
  • java联调生成测试数据工具类方式
    目录java联调生成测试数据工具类代码java druid工具类及测试总结java联调生成测试数据工具类 在日常的联调中,我们经常需要准备一定数量的测试数据,用来配合前端测试。 当然...
    99+
    2023-05-14
    java联调 java生成测试数据 java工具类
  • java联调生成测试数据工具类的方法是什么
    这篇文章主要介绍了java联调生成测试数据工具类的方法是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇java联调生成测试数据工具类的方法是什么文章都会有所收获,下面我们一起来看看吧。java联调生成测试数...
    99+
    2023-07-05
  • mysql 快速生成100w条测试数据
    本篇文章是关于MySQL生成百万条数据的全部过程,每一步都有具体的sql,并且每一步都有具体的注释,详细步骤如下:1、创建数据库CREATE DATABASE `test_bai` -- 创建数据库 ...
    99+
    2023-05-15
    批量插入 测试数据 大数据 快速生成 mysql
  • MySQL中如何自动生成测试数据
    MySQL中可以通过以下几种方法来自动生成测试数据: 使用INSERT INTO语句插入数据:可以编写INSERT INTO语句来...
    99+
    2024-04-30
    MySQL
  • mvn站点怎么生成及测试
    本篇内容介绍了“mvn站点怎么生成及测试”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1、mvn 原型:生成Maven archetypes...
    99+
    2023-06-26
  • 数据库性能调优的秘密武器:压力测试的力量
    压力测试的原理 压力测试涉及在数据库上模拟高负载,以超出其正常运行范围。这可以通过模拟并发用户、高事务速率或大数据集访问来实现。压力测试工具会监控数据库的响应时间、资源利用率和错误率,以识别性能瓶颈。 压力测试的好处 压力测试提供以下好处...
    99+
    2024-04-02
  • Golang 函数调试和集成测试有什么区别?
    go 语言提供了函数调试和集成测试两种测试方法。函数调试用于测试单个函数,放在与函数相同的目录中,手动模拟输入。集成测试用于测试代码库协作,放在单独的目录中,使用框架模拟输入,包括多个组...
    99+
    2024-04-17
    golang 集成测试 函数调试
  • 怎么使用Redis批量生成数据
    这篇文章主要介绍“怎么使用Redis批量生成数据”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么使用Redis批量生成数据”文章能帮助大家解决问题。Redis自带Debug方法redis提供的de...
    99+
    2023-06-30
  • Java怎么自动生成mock单元测试
    在Java中,我们可以使用Mockito等库来自动生成mock单元测试。 以下是一个示例: 首先,我们需要在项目的构建文件中添加M...
    99+
    2023-10-22
    java
  • Golang怎么使用ChatGPT生成单元测试
    这篇文章主要介绍“Golang怎么使用ChatGPT生成单元测试”,在日常操作中,相信很多人在Golang怎么使用ChatGPT生成单元测试问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Golang怎么使用C...
    99+
    2023-07-05
  • 手把手教你使用Navicat生成MySQL测试数据
    目录1.配置测试数据库2.使用Navicat数据生成工具3.操作流程1.设置生成数据的条数2.设置数据的格式3.生成数据4.总结使用Navicat生成mysql测试数据 Navicat版本:16.1.3 场景:因为某些原...
    99+
    2023-05-12
    navicat生成mysql navicat生成mysql测试数据 mysql测试数据生成
  • 海外轻量级服务器怎么测试性能
    海外轻量级服务器测试性能的方法:1、通过同时在线人数,将峰值调节到最高,进行压力测试;2、通过模拟系统高峰期的使用人数及各种事物的操作频率,进行稳定性测试;3、通过模拟一些非正常状况,如突然断电、硬盘故障等,进行容错性测试;4、对以出现过的...
    99+
    2024-04-02
  • 基于Python怎么用Faker批量测试数据
    这篇文章主要介绍了基于Python怎么用Faker批量测试数据的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇基于Python怎么用Faker批量测试数据文章都会有所收获,下面我们一起来看看吧。测试过程中,经常需...
    99+
    2023-06-29
  • MySQL生成千万测试数据以及遇到的问题
    目录1、创建基础表结构2、创建内存表3、创建存储过程和函数4、执行存储过程5、遇到的问题5.1、1449错误5.2、1114错误6、同步数据总结1、创建基础表结构 CREATE TA...
    99+
    2022-11-13
    mysql千万数据查询 mysql快速生成测试数据 mysql 千万级数据
  • idea单元测试自动生成怎么实现
    实现自动生成单元测试的方法可以分为以下几个步骤: 静态代码分析:通过静态代码分析工具(如静态代码分析器、AST解析器等),对待测...
    99+
    2023-10-22
    idea
  • mysql怎么测试数据库是否连接成功
    这篇文章将为大家详细讲解有关mysql怎么测试数据库是否连接成功,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。mysql测试数据库是否连接成功的方法:首先将相关端口全部开...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作