MySQL学习Day25——数据库其他调优策略

一、数据库调优的措施:

1.调优的目标:

(1)尽可能节省系统资源,以便系统可以提供更大负荷的服务

(2)合理的结构设计和参数调整,以提高用户操作的响应速度

(3)减少系统的瓶颈,提高MySQL数据库整体的性能;

2.如何定位调优:用户的反馈、日志分析、服务器资源使用监控、数据库内部状况监控

3.调优的维度和步骤:

(1)选择合适的DBMS:DBMS的选择关系到了后面的整个设计过程,所以第一步就是要选择适合的DBMS

(2)优化表设计:表的结构要尽量遵循三范式原则,如果查询的次数比较多可以采用反范式化进行优化,表字段的数据类型应该合理。

(3)优化逻辑查询:子查询优化、等价谓词重写、视图重写、条件优化、连接消除和嵌套连接消除等

(4)优化物理查询:合理使用表的索引

(5)使用Redis或者Memcached作为缓存

(6)库级优化:

a.读写分离:

b.数据分片:

二、优化MySQL服务器:

1.优化服务器硬件:服务器的硬件性能直接决定着MySQL数据库的性能,硬件的性能瓶颈直接决定MySQL数据库的运行速度和效率,针对性能瓶颈提高硬件配置,可以提高数据库的查询和更新速度。

(1)配置较大的内存:足够大的内存是提高MySQL数据库的性能方法之一,内存的速度比磁盘IO快很多,可以通过增加系统的缓冲区容量使得数据在内存中停留的时间更长,以减少磁盘的IO。

(2)配置高速磁盘系统

(3)合理分布磁盘IO:把磁盘IO分散在多个设备上,以减少资源竞争,提高并行操作能力

(4)配置多处理器:MySQL是多线程的数据库,多处理器可以同时执行多个线程。

2.优化MySQL的参数:通过优化MySQL的参数可以提高资源利用率,从而达到提高服务器性能的目的。主要的参数都在my.cnf或者my.ini文件的[mysqld]组中,配置完毕参数后需要重新启动MySQL服务才能生效。

(1)innodb_buffer_pool_size:表示InnoDB类型的表和索引的最大缓存。它不仅仅缓存索引数据,还会缓存表的数据。这个值越大,查询的速度就会越快。但是这个值太大会影响操作系统的性能。

(2)key_buffer_size:表示索引缓冲区的大小,索引缓冲区是所有的线程共亭。增加索引缓冲区可以得到更好处理的索引(对所有读和多重写)。key_buffer_size的大小取决于内存的大小。如果key_buffer_size太大,就会导致操作系统繁换页,也会降低系统性能。

(3)table_cache:表示同时打开表的个数,table_cache值越大,能够同时打开的表的个数越多。物理内存越大,但是该值越大会影响操作系统的性能。

(4)query_cache_size:表示查询缓冲区的大小。如果Qcache_lowmem_prunes的值非常大,则表明经常出现缓冲不够的情况,就要增加Query_cache_size的值;如果Qcache_hits的值非常大,则表明查询缓冲使用非常频繁,如果该值较小反而会影响效率,那么可以考虑不用查询缓存;MySQL8.0之后失效。该参数需要和query_cache_type配合使用。

(5)query_cache_type:当query_cache_type的值是0时,所有的查询都不使用查询缓存区。当该参数的值为1时,所有的查询都将使用查询缓存区,当该参数的值为2时,只有在查询语句中使用SQL_CACHE关键字查询才使用查询缓存区。使用查询缓存区可以提高查询的速度,这种方式只适用于修改操作少且经常执行相同的查询操作的情况。

(6)sort_buffer_size:表示每个需要进行排序的线程分配的缓冲区的大小。增加这个参数的值可以提高ORDER BY或GROUP BY操作的速度。

(7)join_buffer_size:表示联合査询操作所能使用的缓冲区大小,和sort_buffer_size一样该参数对应的分配内存也是每个连接独享。

(8)read_buffer_size:表示每个线程连续扫描时为扫描的每个表分配的缓冲区的大小(字节)。当线程从表中连续读取记录时需要用到这个缓冲区。

(9)innodb_flush_log_at_trx_commit:表示何时将缓冲区的数据写入日志文件,并且将日志文件写入磁盘中。该参数对于InnoDB引擎非常重要。该参数有3个值,分别为0、1和2,默认值为1。

a.innodb_flush_log_at_trx_commit的值为0:表示每秒1次的频率将数据写入日志文件并将日志文件写入磁盘。每个事务的commit并不会触发前面的任何操作。该模式速度最快,但不太安全,mysqld进程的崩溃会导致上一秒钟所有事务数据的丢失。

b.innodb_flush_log_at_trx_commit值为1:表示每次提交事务时将数据写入日志文件并将日志文件写入磁盘进行同步。该模式是最安全的,但也是最慢的一种方式。因为每次事务提交或事务外的指令都需要把日志写入(flush)硬盘。

c.innodb_flush_log_at_trx_commit值为2:表示每次提交事务时将数据写入日志文件,每隔1秒将日志文件写入磁盘。该模式速度较快。也比0安全,只有在操作系统崩溃或者系统断电的情况下,上一秒钟所有事务数据才可能丢失。

(10)innodb_log_buffer_size:是InnoDB存储引擎的事务日志所使用的缓冲区的大小。为了提高性能也是先将信息写入Innodb Log Buffer中,当满足innodb_flush_log_tnx_commit参数所设置的相应条件(或者日志缓冲区写满)之后,才会将日志写到文件(或者同步到磁盘)中。

(12)max_connections:表示允许连接到MySQL数据库的最大数量,默认值是151,连接数 不是越大越好,因为这些连接会浪费内存的资源。过多的连接可能会导致MySQL服务器僵死。

(13)back_log:用于控制MySQL监听TCP牆口时设置的积压请求栈大小,如果MySql的连接数达到max_connections时,新来的请求将会被存在堆栈中,以等待某一连接释放资源,该堆栈的数量即back_log,如果等待连接的数量超过back_log将不被授予连接资源。

(14)thread_cache_size:线程池缓存线程数量的大小,当客户端断开连接后将当前线程缓存起来,当在接到新的连接请求时快速响应无需创建新的线程。

(15)wait_timeout:指定一个请求的最大连接时间

(16)interactive_timeout:表示服务器在关闭连接前等待行动的秒数

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

政安晨【TypeScript高级用法】(二):泛型与命名空间

TypeScript的泛型允许我们在定义函数、类和接口时使用参数化类型,使得这些实体可以适应不同类型的数据。泛型可以增加代码的重用性和灵活性。 同时,TypeScript的命名空间提供了一种在全局命名空间中组织代码的方式,可以避免全局变量污染和命…

项目打包时报错 There are test failures.

报错原因是 test测试类有问题 我们可直接选择跳过测试类打包 如下 此时再次打包就成功了

高级软件开发知识点

流程 算法题简历上项目用到技术、流程、遇到问题HR 准备 常考的题型和回答思路刷100算法题,理解其思想,不要死记最近一家公司所负责的业务和项目: 项目背景、演进之路,有哪个阶段,每个阶段主要做什么项目中技术选型…

vue2和vue3的区别介绍

Vue.js 是一个流行的前端JavaScript框架,用于构建用户界面和单页应用程序。自从Vue.js首次发布以来,它就因其简洁的API、灵活的架构和易于上手的特点而受到了广泛的欢迎。Vue.js的第二个主要版本(Vue 2)发布于2016年,而…

AutoGPT实现原理

AutoGPT是一种利用GPT-4模型的自动化任务处理系统,其主要特点包括任务分配、多模型协作、互联网访问和文件读写能力以及上下文联动记忆性。其核心思想是通过零样本学习(Zero Shot Learning)让GPT-4理解人类设定的角色和目标,并通过…

正则表达式在QT开发中的应用

一.正则表达式在QT开发中的使用: 1.模式匹配与验证:正则表达式最基本的作用就是进行模式匹配,它可以用来查找、识别或验证一个字符串是否符合某个特定的模式。例如,在表单验证中,可以使用正则表达式来检查用户输入的邮…

微擎安装,卡在“安装微擎”界面

进入install.php,点击【在线安装】 下一步配置数据库,开始安装系统 然后显示进度条,进度条一闪而过 然后就没有进度条显示了,一直卡在这里 第一次等了好久, 删除目录下的文件,重装还是这样 再重启服务器&…

C语言数组作为函数参数

有两种情形; 一种是数组元素作为函数实参;一种是数组名作为函数参数; 新建一个VC6单文档工程; void printshz(int , CDC* , int , int ); double getav(int a[5]); ...... void CShzcshView::OnDraw(CDC* pDC) {CShzcshDoc* pDo…

electron+vue3全家桶+vite项目搭建【29】封装窗口工具类【3】控制窗口定向移动

文章目录 引入实现效果思路声明通用的定位对象主进程模块渲染进程测试效果 引入 demo项目地址 窗口工具类系列文章: 封装窗口工具类【1】雏形 封装窗口工具类【2】窗口组,维护窗口关系 封装窗口工具类【3】控制窗口定向移动 很多时候,我们想…

python识别并控制操作已打开的浏览器进行自动化测试

前提:已安装python和selenium 一、将浏览器以debugger模式打开 打开方法: 1.右击浏览器,选择属性: 2.在目标中加上 --remote-debugging-port9222 --user-data-dir"C:\selenum\AutomationProfile" 二、识别代码 from…

npm、cnpm、pnpm使用详细

简介: npm:npm(Node Package Manager)是Node.js的包管理工具,用于安装、更新、卸载Node.js的模块和包。它提供了一个命令行界面,使得开发者可以轻松地管理项目依赖。npm 是 nodejs 中的一部分,…

[linux] 使用 kprobe 观察 tcp 拥塞窗口的变化

tcp 中拥塞窗口用来做拥塞控制。 在发送侧,要发送数据的时候会基于拥塞窗口进行判断,当前这个包还能不能发送出去。 tcp 发包函数是 tcp_write_xmit(),在这个函数中调用 tcp_cwnd_test() 来判断当前拥塞窗口让不让发包。从 tcp_cwnd_test() 函…

【推荐算法系列十八】:DSSM 召回算法

参考 推荐系统中 DSSM 双塔模型汇总(二更) DSSM 和 YouTubeDNN 都是比较经典的 U2I 模型。 U2I 召回 U2I 召回也就是 User-to-Item 召回,它基于用户的历史行为以及用户的一些个人信息,对系统中的候选物品进行筛选,挑…

C++ Primer Plus Sixth Edition - 下载电子书与源代码

C Primer Plus Sixth Edition - 下载电子书与源代码 1. C Primer Plus, 6th Edition1.1. Download the source code files1.2. 下载源代码文件 2. C Primer Plus, Sixth Edition (PDF)3. Table of ContentsReferences 1. C Primer Plus, 6th Edition C Primer Plus, 6th Editi…

Spring事件监听机制

前言 Spring 的事件监听机制,采用了观察者的设计模式。一套完整的事件监听流程是这样的,首先定义事件类,即ApplicationEvent的子类,它包含事件发生的时间戳timestamp和产生事件的来源source,以及自定义的其它事件属性…

IDEA运行大项目启动卡顿问题

我打开了很多项目,然后又启动了一个大型项目时,启动到一半,弹出一个窗口,告诉我idea内存不够,怎么解决这个问题? 1、先把多余的项目关掉,再启动这个大项目, 2、如果还是不行就去修改…

OpenDDS之QosXml库编译(Windows + VS2019)

目录 1、需求背景2、基础环境3、编译xercesc3.1、下载xercesc3.2、编译xercesc 4、编译ACE_XML_Utils4.1、生成XML_Utils解决方案4.2、编译XML_Utils 5、编译QOS_XML_XSC_Handlerd5.1、生成QOS_XML_XSC_Handlerd解决方案5.2、编译QOS_XML_XSC_Handlerd 6、测试例子6.1、生成dum…

vue3 ts setup 组合式API 使用教程

vue3中新增了组合式API,本文讲解组合式API setup 的使用 关于setup 的出现和 vue3 js setup 的使用,笔者已经在2022年的文章中说明,这里不再赘述,需要的朋友可以阅读:《vue3 setup 使用教程》 官网文档:h…

[C语言]——C语言数据类型和变量

目录 一.数据类型介绍 1.字符型 2.整型 3.浮点型 4.布尔类型 5.各种数据类型的长度 5.1sizeof操作符 5.2数据类型长度 5.3sizeof中表达式不计算 二.signed 和 unsigned 三.数据类型的取值范围 四.变量 1.变量的创建 2.变量的分类 一.数据类型介绍 C语⾔提供了丰富…

排序——堆排序

本节继续复习排序算法。这次复习排序算法中的堆排序。 堆排序属于选择排序。 目录 什么是堆? 堆排序 堆排序的思想 堆排代码 向下调整算法 堆排整体 什么是堆? 在复习堆排序之前, 首先我们需要回顾一下什么是堆 。 堆的本质其实是一个数…