性能测试-数据库

news2024/11/15 11:09:17

一、数据库事务机制

ACID描述

1、原子性Atomicity:事务通常由多个语句组成。原子性保证将每个事务视为一个“单元”,该事务要么完全成功,要么完全失败

2、一致性Consistency:“一致”是指数据库中的数据是正确的,不存在矛盾。事务的一致性是指事务执行前后,数据都是正确的,不存在矛盾。如果执行后数据是矛盾的,事务就会回滚到执行前的状态(执行前是一致的)

3、隔离性Isolation:通常数据库会有多个事务同时执行,隔离可确保事务的并发执行不会相互干扰。

4、持久性Durability:持久性保证一旦事务被提交,即使在系统故障(例如,停电或崩溃)的情况下,事务也将保持提交状态

一致性详解:数据库事务一致性的理解_事务的一致性-CSDN博客

二、数据库锁机制

锁机制保证了数据库事务的ACID特性

表锁

行锁

查看锁情况:mysql8查看锁信息_Mysql_脚本之家

1、性能测试,涉及更新数据库的接口,比如修改用户头像,可能会因为锁,导致接口慢

2、性能测试,某个接口,比如注册,如果需要操作三个表,但是批量执行后,三个表更新的数据条数不一致,说明事务控制出了问题。——所以性能测试后要验证数据库中数据的一致性

三、数据库调优思路汇总

1、数据库出现瓶颈的现象:

1.1、资源使用率过高

CPU、网络资源、硬盘资源、内存

1.2、有慢查询日志

超过慢查询阈值long_query_time的增删改查语句

查询是否开启慢查询

show variables like '%slow_query_log%';

开启慢查询

set global slow_query_log='ON';

修改慢查询阈值(查过这个值的查询、更新会被记录到满查询log中)

set global long_query_time=1;

满查询日志

slow_query_log_file

注意:命令行可以,navicat会报错误

mysql> show variables like '%slow_query_log%';
+---------------------+-----------------------------------------+
| Variable_name       | Value                                   |
+---------------------+-----------------------------------------+
| slow_query_log      | OFF                                     |
| slow_query_log_file | /var/lib/mysql/VM-100-3-centos-slow.log |
+---------------------+-----------------------------------------+
2 rows in set (0.00 sec)
mysql> set global slow_query_log='ON';
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like '%slow_query_log%';
+---------------------+-----------------------------------------+
| Variable_name       | Value                                   |
+---------------------+-----------------------------------------+
| slow_query_log      | ON                                      |
| slow_query_log_file | /var/lib/mysql/VM-100-3-centos-slow.log |
+---------------------+-----------------------------------------+
2 rows in set (0.00 sec)
mysql> set global long_query_time=1;
Query OK, 0 rows affected (0.00 sec)
mysql> show variables like '%long_query_time%';
+-----------------+-----------+
| Variable_name   | Value     |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
1 row in set (0.00 sec)

2、调优——连接池

连接池过多——数据库压力大,处理变慢——资源使用率高——降低连接池数量

连接池过少——应用等待连接池释放消耗时间,导致程序响应慢——资源使用率低——增加连接池数量

3、调优——内存大小

内存大小变量:innodb_buffer_pool_size

可以修改该变量,调整大小,数据库一般独立部署运行,服务器的内存80%给到数据库

mysql> show variables like '%innodb_buffer_pool_size%';
+-------------------------+-----------+
| Variable_name           | Value     |
+-------------------------+-----------+
| innodb_buffer_pool_size | 134217728 |
+-------------------------+-----------+
1 row in set (0.00 sec)

mysql> 

4、调优——SQL

4.1 查询调优
(1)尽量用到索引

未用到索引的情况
- 对应筛选条件 没建立索引,那就不会用到索引
-【数据量比较小】创建了索引不一定会用到索引,数据库本身有优化机制


如何查看表创建的索引show index from 表;

如何检测SQL语言用到索引
查看执行计划:EXPLAIN  sql 语句
执行计划内容:

主要看Type字段,从上往下 --- 逐步变慢


 索引最好的状态就是以下三种
1)consts 单表中最多只有一个匹配行(主键或者唯一索引),在优化阶段即可读取到数据

2)ref 指的是使用普通的索引(normal index)

3)range 对索引进行范围检索

下面三种都比较慢type=index,索引物理文件全扫描,速度非常慢,这个 index 级别比较 range 还低,与全表扫描是小巫见大巫

(2)尽量避免查询不需要的数据查询需要的信息

避免:select *
实际业务场景,可能只需要记录的 部分字段
原因:查询不需要的数据 -- 占内存、网络带宽最终 影响 响应时间、吞吐量


(3)避免大量的表关联 join

一条SQL查询 涉及的表越多, SQL越慢
 阿里巴巴 内部: 禁止出现 3张表以上的关联查询


(4)搜索场景严禁左模糊或者全模糊

like 模糊查询可能导致索引失效

右模糊走索引,左模糊、全模糊不走索引
 
右模糊 'aa%'

全模糊:'%aa%'

左模糊: '%aa'


(5)功能设计: 不论表大小,都要加上分页的参数

防止 后续数据库表数据增加,而产生性能问题
性能测试-- 针对未来的某个场景模拟 未来表数据增加之后,系统是否能够支撑

4.2 更新调优

非必要,不要主动锁数据
    数据库 提供SQL语句,主动 锁表/锁记录
    如果因为数据被锁,而导致 请求变慢 【监控 数据库 锁等待信息】
及时关闭事务
    事务 会导致 数据库 锁表/锁数据 情况
    操作完数据库之后,没有及时 关闭事务,可能导致其他操作数据的变慢
大量更新可以用批处理
    业务场景
        数据导入功能
        数据批量删除/修改
    1. 数据库 -- 批量执行多条SQL语句
    2. 插入 -- values sql

5、调优——表结构

设计表的时候。就要考虑索引
    数据量非常大的时候,创建索引是很慢的
    创建索引也可能导致数据库变卡


表结构可以适当的做一些冗余
字段允许适当冗余,以提高查询性能,但必须考虑数据一致。冗余字段应遵循:

      1)不是频繁修改的字段。

      2)不是 varchar 超长字段,更不能是 text 字段。正例:商品类目名称使用频率高,字段长度短,名称基本一成不变,可在相关联的表中冗余存储类目名称,避免关联查询

缺点: 字段修改的时候会涉及多个表很麻烦,而且占用更多空间 这就是性能优化的取舍

触发器、主外键,高并发下避免使用
触发器:当我们执行数据操作的时候, 触发数据库里面设定好的 存储过程的时候/用户自定义功能的执行
主外键:当进行数据变更的时候, 数据库会去额外进行主外键检测
主外键的目的:是为了确保数据的正确性 ,例如:员工表里面的 部门ID字段,和 部门表的ID字段 一一对应,数据的正确 应该交给 应用程序去维护(业务逻辑),而不是交给数据库,因为数据库的性能不高,删除部门之前,程序先查询部门下是否有员工。尽量少让数据库干活


表字段类型尽量和使用时需要的类型相匹配,避免无谓的类型转换

6、调优——集群架构

单台数据库服务器,在面临海量的数据,海量的请求情况下, 肯定是有上限
集群架构
    用多台服务器
    部署多个数据库服务
    从开发调用的角度,依然是像一台服务器去使用‘
 

数据库服务器
     分库分表:每个数据库服务器上,有一张结构一样的表:
 

shardingsphere(数据库中间件)

官网:https://shardingsphere.apache.org/index_zh.html

虚拟数据库:本质上是数据库代理,需要依赖java环境
server.yaml:配置 虚拟数据库 用户名 和密码
config-sharding.yaml:真实操作的数据库信息、操作的规则
start.bat:启动,默认端口 3307
使用时,连接数据库代理,而不是 真实的数据库
注意事项: 这个软件也是需要单独部署,这个服务器也需要监控起来这个服务器的配置也需要比较高,所有的sql 都需要经过 
它不做数据真实存储,只是 做SQL的分发,和 结果的合并

分库分表
    一个表拆分为多个表,甚至放在不同的服务器
读写分离
    一个数据库 主服务器 负责 写入数据
    读取数据的所有sql请求,由其他从服务器进行处理

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1515799.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

云桥通SD-WAN企业组网与IPLC:广域网连接方案对比

1、技术原理: a.云桥通SD-WAN企业组网:基于软件定义网络技术,通过虚拟化、智能路由和网络功能虚拟化等手段实现多种网络连接的集中管理。 b.IPLC:采用传统电路交换技术,通过物理专线在不同地理位置建立点对点的专用通…

【C语言】求字符串长度,三种方法(库函数,指针运算)简单易懂!

目录 一,strlen函数 1,strlen函数 2,strlen函数使用 二,getchar()函数 1,getchar函数 2,代码 三,指针运算 代码: 四,小结 一,strlen函数 1&#xff…

ATA-2168高压放大器用途有哪些方面

高压放大器是一种电子设备,用于将低电压信号放大为较高电压信号。它在各种应用领域中都具有重要作用。下面西安安泰Aigtek将详细探讨高压放大器的多重应用方面,以及它们在科学、医疗、工业和通信等领域中的关键作用。 一、科学研究 1.1物理学实验 高压放…

精品基于Uniapp+ssm英语学习交流平台小程序打卡计划备忘录

《[含文档PPT源码等]精品微信小程序基于Uniappssm英语学习交流平台小程序》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功! 软件开发环境及开发工具: 开发语言:Java 后台框架:ssm 安卓框…

「璞华精选」品牌展区成为亮点,引领海外优质生活新潮流!

展会概况 3月07-09日,CCF 2023上海春季百货展在上海新国际博览中心圆满收官。以“聚焦品牌引流行业”为定位目标的CCF上海国际日用百货(春季)博览会,立足上海,辐射全球商贸,链接行业市场全局,赋…

备战蓝桥杯---牛客寒假基础训练营补题1

1.第二类斯特林数: 2^n-1就是n个1的二进制,因为每一个&为0,所以我们可以把问题等价于n个1(不同的球)的串分配给m个非空的盒子,求方案数,这就转化成了第二类斯特林数。 我们令s(n,m)表示n个…

安装Docker的过程?

Docker Desktop概述 Docker Desktop是适用于Mac、Linux或Windows环境的一键安装应用程序,允许您构建、共享和运行容器化应用程序和微服务。 它提供了一个简单的GUI(图形用户界面),允许您直接从机器管理容器、应用程序和图像。您可…

png和jpg哪个清晰?它们之间怎么互相转换?

在数字图像处理领域,PNG和JPG是两种备受欢迎的图像格式。这两种格式各自拥有独特的特点,而对于许多用户而言,其中一个关键的关注点就是图像的清晰度。png和jpg哪个清晰?此外,如果需要在它们之间进行转换,我…

“金航标,连接世界”

金航标kinghelm宋仕强先生说,“金航标,连接世界”。连接器的作用是为两个电路子系统提供一个可分离的界面,一方面使得零部件或子系统的维护或升级不必修改整个系统;另一方面提高了零部件的便携性、外围设备的拓展能力,…

使用虚拟机安装CentOS7操作系统并部署数据库

1 安装操作系统 最初下载的系统镜像为:CentOS-7-x86_64-Everything-2207-02.iso,安装时总是提示:“客户机操作系统已禁用cpu请关闭或重置虚拟机”,查找了很多资料都无法解决,最终更换系统镜像为:CentOS-7-…

2024/3/14打卡(14届蓝桥杯)——差分

标准差分模板 差分——前缀和的逆运算(一维二维)-CSDN博客 题目 小蓝拥有 nn 大小的棋盘,一开始棋盘上全都是白子。 小蓝进行了 m 次操作,每次操作会将棋盘上某个范围内的所有棋子的颜色取反(也就是白色棋子变为黑色&#xff0…

jar运行报错Unable to read meta-data for class

目录 一、场景描述 二、解决办法 1)情况一 2)情况二 贴一下部署报错堆栈信息: java.lang.IllegalStateException: Unable to read meta-data for class com.zhh.zhhd.biz.config.Test1Configat org.springframework.boot.autoconfigure.…

goland设置保存文件时不将4个空格转为TAB

goland设置保存文件时不将4个空格转为TAB 版本:GoLand 2022.3 设置路径: Settings -> Editor -> Code Style -> Go -> Run gofmt图示:

无缝集成 MongoDB Relational Migrator,Tapdata 提供关系型到 MongoDB 实时迁移优化方案

在去年的 MongoDB 用户大会纽约站上,MongoDB 正式宣布全面推出新工具 MongoDB Relational Migrator(MongoDB RM),用以简化应用程序迁移和转换——即从传统关系型数据模型到现代的文档数据模型,助力组织快速提升运营效率…

opencv dnn模块 示例(25) 目标检测 object_detection 之 yolov9

文章目录 1、YOLOv9 介绍2、测试2.1、官方Python测试2.1.1、正确的脚本2.2、Opencv dnn测试2.2.1、导出onnx模型2.2.2、c测试代码 2.3、测试统计 3、自定义数据及训练3.1、准备工作3.2、训练3.3、模型重参数化 1、YOLOv9 介绍 YOLOv9 是 YOLOv7 研究团队推出的最新目标检测网络…

手撕快速排序

定义 快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法. 其基本思想为:任取待排序的某个元素作为基准值,按照该排序码将待排序集合分割成两个子序列, 左子序列中所有元素均小于基准值,右子序列均大于基准值,然后左右子序列重复该过程,知道所有元素都有序为止. (核心…

投后管理系统的功能模块

投后管理系统的技术难点可能包括以下几个方面,这些技术难点需要综合考虑,并结合具体的业务需求和技术实现,才能构建出高效、安全、稳定的投后管理系统。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作…

【Python】成功解决NameError: name ‘sns‘ is not defined

【Python】成功解决NameError: name ‘sns’ is not defined 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程👈 希望得到您…

基于Java (spring-boot)的毕业作品管理系统

一、项目介绍 管理员管理设计题目,投票记录,选题信息以及公告。 教师对设计题目进行投票,审核并管理用户选题信息。 用户选择设计题目,查看选题审核状态,管理选题信息。 二、作品包含 三、项目技术 后端语言&#xff1…

一体式以电折水智能终端:化繁为简,智能八合一

一体式以电折水智能终端通过高度集成化设计,巧妙融合了空气开关、开关电源、隔离变压器、接触器、智能电表、RTU、4G通信模块、定位模块等八大核心功能,不仅展现了经济高效和智能运维的双重优势,更以其超强的安全防护能力确保了使用的高度安全…