数据库优化

1. 优化的目的:

  • 避免页面出现访问错误

    • 数据库连接timeout产生5xx错误
    • 慢查询导致页面无法加载(就是查询操作消耗了比较多的时间)
    • 数据库阻塞导致数据无法提交
  • 增加数据库的稳定性

    • 很多的数据库问题都是低效的查询引起的
  • 优化用户体验

    • 提升浏览速度

2. 数据准备

准本一个数据库:https://blog.youkuaiyun.com/forever19911314/article/details/73527610

3. 优化一:慢查询日志

使用慢查询监控有效率的问题

显示是否开启了慢查询日志
show variables like 'slow_query_log';
指定慢查询文件位置在哪里
set global show_query_log_file = '/home/mysql/sql_log/mysql-slow.log'
是否要把没有使用索引的sql记录到慢查询日志中
set global log_queries_not_using_indexes = on;
把大于1秒的查询记录在日志中
set global long_query_time  = 1
  • show variables like '%log%';
    查看配置项

  • set global log_queries_not_using_indexes = on;
    把没有使用索引的sql记录到慢查询日志中

  • show variables like 'long_query_time';
    查看long_query_time的配置,并将它设置为0.000000


    6262743-1e7fc8b0eff46873.png
    10秒

    6262743-5789755584fb0a28.png
    设置为0
  • 开启慢查询
    set global slow_query_log = on;

  • show variables like 'slow%';
    查看日志存储目录


    6262743-6f370643f4933438.png
    目录
  • 日志格式

时间
# Time: 2018-12-06T08:13:23.876056Z
主机信息
# User@Host: root[root] @ localhost [::1]  Id:     7
sql执行信息
# Query_time: 0.003867  Lock_time: 0.003738 Rows_sent: 2  Rows_examined: 2
sql执行时间
SET timestamp=1544084003;
sql内容
select * from store limit 10;
  • 慢查询分析工具

有问题的sql有哪些:

- 每次查询占用时间长的sql
    通常为pt-query-digest的前几个查询
- IO大的sql
    注意pt-query-digest分析的rows examine项
- 未命中索引的sql
    注意pt-query-digest分析的rows examine项和Rows send的对比
  1. mysqldumpslow
    mysql自带,linux可以直接使用,windows不行,需要安装个别的东西,
-t 3:显示top3的记录,后面跟着的是日志的目录位置
mysqldumpslow -t 3 /var/lib/mysql/zl-virtual-machine-slow.log | more
6262743-6da99446a92b60b5.png
查询后的结果
  1. pt-query-digest
    效果比mysqldumpslow好一些

我使用的时候遇到了bug,不能用:
The pipeline caused an error: Pipeline process 5 (iteration) caused an error: Redundant argument in sprintf at /usr/bin/pt-query-digest line 2556.
网上说安装高版本的就好了,没有试。

sudo pt-query-digest /var/lib/mysql/zl-virtual-machine-slow.log | more

4.优化二:通过explain查询和分析sql的执行计划

就是在运行sql之前,运行一下explain sql,看一下这个sql好不好使

6262743-9598874287e58ba9.png
示例

explain返回各列的含义

  • table:显示这一行的数据是关于那张表的
  • type:重要,显示连接使用了何种类型,从最好到最差的连接类型为:const、eq_reg、ref、range、index、all
  • possible_keys:显示可能应用在这张表中的索引。空表示没有可能的索引。
  • key:实际使用的索引。null表示没有索引。
  • key_len:使用的索引的长度。在不损失精确性的情况下,长度越短越好。
  • ref: 显示索引的哪一列被使用了,如果可能的话,是一个常数。
  • rows:MYSQL认为必须检查的用来返回请求数据的行数。

5 语句优化

5.1 max(利用索引)

  • 比如查询一个max:
select max(payment_date) from payment
  • 用explain分析一下:
explain select max(payment_date) from payment \G
  • 分析结果:


    6262743-a48b56f6b59292da.png
    rows达到了一万6
  • 建立索引:

create index idx_paydate on payment (payment_date)
6262743-a1aad7f556764f55.png
建立索引
  • 再次explain分析一下:


    6262743-14497ac1273b5fe2.png
    rows变成了null

这时候再select max(payment_date) from payment就比原来优化了

训练数据保存为deep_convnet_params.pkl,UI使用wxPython编写。卷积神经网络(CNN)是一种专门针对图像、视频等结构化数据设计的深度学习模型,在计算机视觉、语音识别、自然语言处理等多个领域有广泛应用。其核心设计理念源于对生物视觉系统的模拟,主要特点包括局部感知、权重共享、多层级抽象以及空间不变性。 **1. 局部感知与卷积操作** 卷积层是CNN的基本构建块,使用一组可学习的滤波器对输入图像进行扫描。每个滤波器在图像上滑动,以局部区域内的像素值与滤波器权重进行逐元素乘法后求和,生成输出值。这一过程能够捕获图像中的边缘、纹理等局部特征。 **2. 权重共享** 同一滤波器在整个输入图像上保持相同的权重。这显著减少了模型参数数量,增强了泛化能力,并体现了对图像平移不变性的内在假设。 **3. 池化操作** 池化层通常紧随卷积层之后,用于降低数据维度并引入空间不变性。常见方法有最大池化和平均池化,它们可以减少模型对微小位置变化的敏感度,同时保留重要特征。 **4. 多层级抽象** CNN通常包含多个卷积和池化层堆叠在一起。随着网络深度增加,每一层逐渐提取更复杂、更抽象的特征,从底层识别边缘、角点,到高层识别整个对象或场景,使得CNN能够从原始像素数据中自动学习到丰富的表示。 **5. 激活函数与正则化** CNN中使用非线性激活函数来引入非线性表达能力。为防止过拟合,常采用正则化技术,如L2正则化和Dropout,以增强模型的泛化性能。 **6. 应用场景** CNN在诸多领域展现出强大应用价值,包括图像分类、目标检测、语义分割、人脸识别、图像生成、医学影像分析以及自然语言处理等任务。 **7. 发展与演变** CNN的概念起源于20世纪80年代,其影响力在硬件加速和大规模数据集出现后真正显现。经典模型如LeNet-5用于手写数字识别,而AlexNet、VGG、GoogLeNet、ResNet等现代架构推动了CNN技术的快速发展。如今,CNN已成为深度学习图像处理领域的基石,并持续创新。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值