微网站开发程序用wordpress

pingmian/2025/10/11 2:15:38/文章来源:
微网站开发程序,用wordpress,做寄生虫对自己的网站有影响吗,网页首页代码大家都知道#xff0c;slow query系统做的好不好#xff0c;直接决定了解决slow query的效率问题 一个数据库管理平台#xff0c;拥有一个好的slow query系统#xff0c;基本上就拥有了解锁性能问题的钥匙 但是今天主要分享的并不是平台#xff0c;而是在平台中看到的奇…大家都知道slow query系统做的好不好直接决定了解决slow query的效率问题 一个数据库管理平台拥有一个好的slow query系统基本上就拥有了解锁性能问题的钥匙 但是今天主要分享的并不是平台而是在平台中看到的奇葩指数五颗星的slow issue 好了关子卖完了直接进入正题 一、症状 一堆如下慢查询 # UserHost: cra[cra] [xx] Id: 3352884621 # Query_time: 0.183673 Lock_time: 0.000000 Rows_sent: 0 Rows_examined: 0 use xx_db; SET timestamp1549900927; # administrator command: Prepare;# Time: 2019-02-12T00:02:07.51680308:00 # UserHost: cra[cra] [xx] Id: 3351119968 # Query_time: 0.294081 Lock_time: 0.000000 Rows_sent: 0 Rows_examined: 0 SET timestamp1549900927; # administrator command: Prepare;从我们的监控图上可以看到每天不定时间段的slow query 总数在攀升但是却看不到任何query 语句 这是我接触到的slow query优化案例中从来没有过的情况比较好奇也比较兴奋至此决心要好好看看这个问题 二、排查 要解决这个问题首先想到的是如何复现这个问题如何模拟复现这个症状 MySQL客户端 模拟prepare * 模拟 root:xx prepare stmt1 from select * from xx_operation_log where id ?; Query OK, 0 rows affected (0.00 sec) Statement prepared* 结果# Time: 2019-02-14T14:14:50.93746208:00 # UserHost: root[root] localhost [] Id: 369 # Query_time: 0.000105 Lock_time: 0.000000 Rows_sent: 0 Rows_examined: 0 SET timestamp1550124890; prepare stmt1 from select * from xx_operation_log where id ?; 结论是 MySQL client 模拟出来的prepare 并不是我们期待的并没有得到我们想要的 administrator command: Prepare perl 模拟prepare #!/usr/bin/perluse DBI;my $dsn dbi:mysql:database${db_name};hostname${db_host};port${db_port};#数据源#获取数据库句柄 my $dbh DBI-connect(DBI:mysql:databasexx;hostxx, xx, xx, {RaiseError 1});my $sql qq{select * from xx_operation_log where id in (?)};my $sth $dbh-prepare($sql); $sth-bind_param (1, 100);sleep 3; $sth-execute(); 结论是跟MySQL客户端一样同样是看不到administrator command: Prepare php 模拟prepare 1. 官方网址https://dev.mysql.com/doc/apis-php/en/apis-php-mysqli-stmt.prepare.html?php $link mysqli_connect(xx, dba, xx, xx_db);/* check connection */ if (mysqli_connect_errno()) {printf(Connect failed: %s\n, mysqli_connect_error());exit(); }$city 1;/* create a prepared statement */ $stmt mysqli_stmt_init($link);if (mysqli_stmt_prepare($stmt, select * from xx_operation_log where id in (1,2,3)){/* bind parameters for markers *//* mysqli_stmt_bind_param($stmt, s, $city);/* execute query */mysqli_stmt_execute($stmt);/* bind result variables */mysqli_stmt_bind_result($stmt, $district);/* fetch value */mysqli_stmt_fetch($stmt);printf(%s is in district %s\n, $city, $district);/* close statement */mysqli_stmt_close($stmt); }/* close connection */ mysqli_close($link); ? php模拟得到的slow 结果 [rootxx 20190211]# cat xx-slow.log | grep administrator command: Prepare -B4 | grep UserHost | grep xx_rx | wc -l 7891[rootxx 20190211]# cat xx-slow.log | grep administrator command: Prepare -B4 | grep UserHost | wc -l 7908结论 通过php代码我们成功模拟出了想要的结果 那顺藤摸瓜抓取下这段时间有相同session id的整个sql执行过程 MySQL开启slow0的抓包模式 可以定位到同一个session id3415357118 的 prepare execute close stmt# UserHost: xx_rx[xx_rx] [xx.xxx.xxx.132] Id: 3415357118 # Query_time: 0.401453 Lock_time: 0.000000 Rows_sent: 0 Rows_examined: 0 use xx_db; SET timestamp1550017125; # administrator command: Prepare; # Time: 2019-02-13T08:18:45.62467108:00 -- # UserHost: xx_rx[xx_rx] [xx.xxx.xxx.132] Id: 3415357118 # Query_time: 0.001650 Lock_time: 0.000102 Rows_sent: 0 Rows_examined: 1 use xx_db; SET timestamp1550017125; update xx set updated_at 2019-02-13 08:18:45, has_sales_office_phone 1, has_presale_permit 1 where id 28886; # Time: 2019-02-13T08:18:45.62613808:00 -- # UserHost: xx_rx[xx_rx] [xx.xxx.xxx.132] Id: 3415357118 # Query_time: 0.000029 Lock_time: 0.000000 Rows_sent: 0 Rows_examined: 1 use xx_db; SET timestamp1550017125; # administrator command: Close stmt; # Time: 2019-02-13T08:18:45.62643008:00结论我们发现prepare时间的确很长但是sql语句却执行的很快这就很尴尬了 本来是想通过抓包看看是否能够验证我们的猜想 prepare的语句非常大或者条件非常复杂从而导致prepare在服务器端很慢 结果发现query语句也都非常简单 那么既然如此我们就找了业务方将对应业务的prepare方法一起看看 结果发现业务使用的是php-pdo的方式所以我们就又有了如下发现 php-pdo 两种prepare模式 http://php.net/manual/zh/pdo.prepare.php 1. 本地prepare $dbh-setAttribute(PDO::ATTR_EMULATE_PREPARES,true);不会发送给MySQL Server2. 服务器端prepare $dbh-setAttribute(PDO::ATTR_EMULATE_PREPARES,false);发送给MySQL Server 验证两种prepare模式 服务端prepare模式( ATTR_EMULATE_PREPARES false) ?php $dbmsmysql; //数据库类型 $hostxxx; //数据库主机名 $dbNametest; //使用的数据库 $userxx; //数据库连接用户名 $pass123456; //对应的密码 $dsn$dbms:host$host;dbname$dbName;try {$pdo new PDO($dsn, $user, $pass); //初始化一个PDO对象$pdo-setAttribute(PDO::ATTR_EMULATE_PREPARES,false);echo ----- prepare begin -----\n;$stmt $pdo-prepare(select * from test.chanpin where id ?);echo ----- prepare after -----\n;$stmt-execute([333333]);echo ----- execute after -----\n;$rs $stmt-fetchAll(); } catch (PDOException $e) {die (Error!: . $e-getMessage() . br/); }strace -s200 -f php mysql1.php 跟踪 大家可以看到这个模式下prepare的时候是将query占位符 发送给服务端的 本地prepare模式 (ATTR_EMULATE_PREPARES true ) ?php $dbmsmysql; //数据库类型 $hostxx; //数据库主机名 $dbNametest; //使用的数据库 $userxx; //数据库连接用户名 $pass123456; //对应的密码 $dsn$dbms:host$host;dbname$dbName;try {$pdo new PDO($dsn, $user, $pass); //初始化一个PDO对象$pdo-setAttribute(PDO::ATTR_EMULATE_PREPARES,true);echo ----- prepare begin -----\n;$stmt $pdo-prepare(select * from test.chanpin where id ?);echo ----- prepare after -----\n;$stmt-execute([333333]);echo ----- execute after -----\n;$rs $stmt-fetchAll(); } catch (PDOException $e) {die (Error!: . $e-getMessage() . br/); }strace -s200 -f php mysql1.php 跟踪 大家可以看到这个模式下prepare的时候是不会将query发送给服务端的只有execute的时候才会发送 跟业务方确认后他们使用的是后者也就是修改了默认值他们原本是想提升数据库的性能因为预处理后只需要传参数就好了 但是对于我们的业务场景并不适合我们的场景是频繁打开关闭连接也就是预处理基本就用不到 另外文档上面也明确指出prepared statements 性能会不好 调整和验证 如何验证业务方是否将prepare修改为local了呢 dba:(none) show global status like Com_stmt_prepare; ----------------------------- | Variable_name | Value | ----------------------------- | Com_stmt_prepare | 716836596 | ----------------------------- 1 row in set (0.00 sec)通过观察发现这个值没有变化说明调整已经生效 总结 prepare的优点 1. 防止SQL注入 2. 特定场景下提升性能什么是特定场景 就是先去服务端用占位符占位后面可以直接发送请求来填空参数值这样理论上来说 你填空的次数非常多性能才能发挥出来prepare的缺点 1. 在服务器端的prepare毕竟有消耗当并发量大频繁prepare的时候就会有性能问题2. 服务端的prepare模式还会带来的另外一个问题就是排错和slow 优化有困难因为大部分情况下是看不到真实query的3. 尽量设置php-pdo为 $pdo-setAttribute(PDO::ATTR_EMULATE_PREPARES,true) 在本地prepare不要给服务器造成额外压力 建议 1. 默认情况下应该使用php-pdo的默认配置采用本地prepare的方式这样可以做到防SQL注入的效果性能差不到哪里去2. 除非真的是有上述说的特定场景可以考虑配置成服务器prepare模式前提是要做好测试 原文链接 本文为云栖社区原创内容未经允许不得转载。

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

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

相关文章

mip网站怎么做匹配dw网站制作的一般流程

前言 最近在研究程序随系统启动,发现在 win7 上因为权限的问题,写注册表的时候总是会出现问题,写不进去导致的不能自动启动,随后决定仔细的看一看这方面的问题。 查资料过程中主要发现有三种方式可以添加到启动,分别…

天津 网站备案无锡网站建设服务公司

1. 隐马尔可夫模型 机器学习最重要的任务是根据已观察到的证据(例如训练样本)对感兴趣的未知变量(例如类别标 记)进行估计和推测。概率模型(probabilistic model)提供了一种描述框架,将描述任…

用thinksns做的网站遵义酷虎网站开发

Linux上创建一个LVM卷组,将多个物理卷添加到卷组中使用 目录1.列出当前系统中所有的块设备信息,包括磁盘、分区、逻辑卷等2.对磁盘进行分区操作3.创建了一个名为 vg_data 的卷组4.将物理卷添加到已经存在的卷组5.在卷组中创建一个逻辑卷6.查看已创建的 L…

上海专业网站建站青岛手机网站建设电话

CCIE-LAB-第四篇-OSPFv2+SHA384+BFD 实际中,思科只会给你5个小时去做下面的全部配置 这个是CCIE-LAB的拓扑图 问题 本次修改设备为sw101.sw102.sw201.sw202 问题描述 1:启动OSPFv2,保证邻居关系 2.保障认证和完整性,在冗余连接上. DC和HQ要保证OSPF的源数据,

网站更新中上海成品网站

源 | 青塔学术、量子位等颠覆科学出版的“游戏规则”?10月20日,国际著名生物学综合期刊eLife官方宣布了一个重大决定:从2023年1月31日起,所有经过同行评审的文章,eLife都不会作出接受/拒绝的决定,而是直接发布在其网站…

响应式网站建设有哪些好处猎头公司logo

21【算法题】反转链表 题目: 给定单链表的头节点 head ,请反转链表,并返回反转后的链表的头节点。 示例 1: 输入:head = [1,2,3,4,5] 输出:[5,4,3,2,1]示例 2: 输入:head = [1,2] 输出:[2,1]示例 3: 输入:head = [] 输出:[]提示: 链表中节点的数目范围是 [0, 5…

重庆永川微网站建设为什么说新浪的门户网站做的好

预读技术是微软vista和windows7默认开启的程序,原意是增加程序运行和开机速度,但事与愿违,该技术已经变成与UAC几乎一样的垃圾,普通用户建议关闭,原因有:1、程序本身额外增加系统负担,启用就多运…

网页设计跟网站建设qq可以上网

1、id选择器可以为标有特定id的html元素指定特定的样式。 2、选择器以#开头,后跟某id的属性值。 3、class选择器用于描述一组元素的样式,class可以在多个元素使用。 4、类选择器用.选择。 5、指定特定的元素使用class。 6、元素的多个类用空格分开&…

蝙蝠做等级的网站网站建设营销策划书

MySQL删除数据的方式都有哪些? 常用的三种删除方式:通过 delete、truncate、drop 关键字进行删除;这三种都可以用来删除数据,但场景不同。 一、从执行速度上来说 drop > truncate >> DELETE;二、从原理上讲 1、DELET…

物流公司网站建设模板网络营销的网站建设

企业是一家拥有多台大型设备的工厂,这些设备需要定期进行保养和维护,以确保其正常运转。而企业内部员工由于专业知识和技能的不同,需要分工协作才能更好地完成各项工作任务。因此,在设备资产管理方面,如何实现高效、便…

番禺建设网站系统wordpress自定义作者连接

问题:下列哪些属于历史文化资源的特征( ). A、稀缺性 B、脆弱性 C、可再生性 D、多样性 参考答案如图所示

合工大网站建设试卷购物类网站首页效果图

自动化构建定义了这样一种场景: 在一个项目成功构建完成后,其相关的依赖工程即开始构建,这样可以保证其依赖项目的稳定。 比如一个团队正在开发一个项目 bus-core-api, 并且有其他两个项目 app-web-ui 和 app-desktop-ui 依赖于这个项目。 …

网站 备案 注销比亚迪新能源汽车怎么样

为什么说Retake是考试的坚强后盾? 在AWS的认证考试体系里面,Retake 是一次重考的机会,允许考生在第一次未通过考试的情况下,再次免费参加考试,注意是免费的。这为考生提供了一个机会来重新准备并且免费再次进行考试。…

网站实施就是网站建设系统开发定制

参考引用 黑马-产品经理入门基础课程 1. 合格的产品经理 1.1 什么是产品 上述产品的共性:解决某个问题的东西上述产品的区别 有形(上图左):颜色、形状、质地和尺寸无形(上图右):脑力劳动成果、…

网站内容策划书wordpress商品多选

思路:DP 这道题相对来说比较基础,但是有时候容易出错的一点就是在dp递推的时候,由于我们的思路是从最后一步向着初始状态推的,所以在编写程序的时候也容易就直接推着走了。其实实际上我们倒着想只是为了推理,真正要递…

网站建设银行vs网站开发如何发布

参考官网:Arduino - Home Arduino是一款简单易学且功能丰富的开源平台,包含硬件部分(各种型号的Arduino开发板)和软件部分(Arduino IDE)以及广大爱好者和专业人员共同搭建和维护的互联网社区和资源。 Arduino IDE软件…

广东网站建设人员深圳网站建设三把火科技

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:Spring Boot 支持哪些日志框架?推荐和默认的日志框架是哪个? Spring Boot支持多种日志框架,包括以下几种: Logback:Logback 是一个快速、灵活…

网站开发与数据库有关系吗鹤壁海绵城市建设官方网站

实验七 JSP内置对象II 目的: 掌握JSP内置对象的使用。理解JSP的作用域掌握session,application对象的使用 实验要求: 完成实验题目要求提交实验报告,将代码和实验结果页面截图放入报告中 实验过程: 一、结合之前…

杭州 网站建设 哪家强邢台中北世纪城网站兼职

参考的大佬“Mahony姿态解算算法详解_imu标定mahony 算法-CSDN博客”我这里只是为了记录 参考代码https://download.csdn.net/download/gpio_01/89492825 学习中。。。

网站建设 猴王网络加拿大广播公司

基于FPGA的EMAC模块与FIFO模块:高速数据传输与存储 在现代社会,高速数据传输和存储是信息技术领域的关键问题之一。而基于FPGA的EMAC模块与FIFO模块则成为了解决这些问题的重要途径。本文将介绍这两个模块的原理、实现方法以及如何在FPGA中应用它们。 …