MySQL基础技能与原理——高级应用课件.pptVIP

MySQL基础技能与原理——高级应用课件.ppt

  1. 1、本文档共18页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
MySQL基础技能与原理 ——高级应用 MySQL DBA Team 彭立勋() 内容概要 6. MySQL数据库同步方案 7. MySQL与应用程序的优化 8. MySQL管理基础 9. 网站常见错误分析 10. MySQL故障案例 MySQL数据库同步方案 Trigger同步方案(Otter) Log同步方案(Erosa) 自带Replication同步方案 Trigger同步方案 Otter采用Trigger方式进行同步。基本原理是为每张要同步的表加上一个触发器,表上增删改都会触发Trigger把主键记录到一张同步表,同步程序读取同步表的主键和修改类型,到目标表去执行相同的操作,保证最终一致。 优点:安全可靠,不会因为日志格式变化或数据库本身的机制变动带来同步程序的大改动。 缺点:对数据库入侵大,需要为每张表建立Trigger,并且在数据库建立存储过程,执行存储过程和触发器会带来一定的数据库压力。 Log同步方案 Erosa采用解析日志的方式进行同步。通过解析Oracle的RedoLog或MySQL的BinLog,获取在数据库上执行的SQL及其顺序,分发到目标数据库去执行一遍,以获得最终一致。 优点:对数据库入侵小,可以将日志拷贝到异地分析,对数据库本身不会增加压力。 缺点:对日志格式依赖大,日志格式发生变动则同步程序需要进行较大改动。 Replication同步方案 MySQL自带Replication复制方案,Oracle也有基于块复制的Stanf by方案。MySQL通过将执行的增删改SQL记录到日志,传输到备机再执行一遍保证最终一致性。可以设置日志格式为ROW(按行记录),Statement(按SQL记录),MIXED(混合式,让MySQL决定每次记录用哪个格式),DDL全部通过Statement方式记录。 优点:MySQL自带,无需第三方工具,部署方便,MySQL自带丰富的参数可以实现各种复制方案,包括双Master,级联Slave等。 缺点:无法实现多源复制,复制位置丢失很难恢复复制。 MySQL与应用程序的优化 预处理与绑定变量 连接池设置及影响 应用程序实现JOIN 预处理与绑定变量 PREPARE语句:SET@sql1=‘xxx’; PREPARE stmt1 FROM @sql1; 变量用问号代替(绑定变量)。 作用:将SQL预先解析,在一个Session内再次使用此语句时不再重新解析。 EXECUTE语句:EXECUTE stmt1 USING @val1,@val2; 作用:将绑定变量赋予具体的值并且执行。 DEALLOCATE语句: DEALLOCATE PREPARE stmt1; 作用:销毁一个预解析SQL,释放资源。 为何使用绑定绑定变量? 因为绑定变量比直接传值更安全,尤其是拼接SQL非常容易被注入攻击。同时绑定变量也可以提高一点效率。 为何使用预处理,尤其在存储过程? 因为预处理可以避免SQL的反复解析,尤其是执行速度快的小SQL,解析时间甚至可能超过执行时间,采用预处理可以显著提高性能。 连接池设置及影响 MySQL如何处理连接? 每次客户端向数据库服务器请求一个连接,服务器根据用户名密码在已有连接内查找一个相同配置的连接,分配给请求。如果找不到,则数据库分配一个新连接给当前请求。 分配新连接做哪些工作? MySQL新开一个连接,就会创建一个新的mysql结构体,其中包括Join_buffer、Sort_buffer和一个Session变量存储数组。 如果连接数过多会怎么样? 如果连接MySQL的线程太多,那么每个线程分配到的join_buffer+sort_buffer总量就会很大,占用大量内存。 如何设置连接池? 建议最小值和最大值差距不要太大,避免连接反复的创建和释放,带来CPU开销。如果连接数一直比较平稳的应用,则最小值和最大值在平均线附近设置即可。如果连接数长期较高,则最小值也设置大一些。如果连接数长期较低,则最大值偏小设置。 应用程序实现JOIN 如果需要跨主机进行JOIN,跨应用进行JOIN,或者数据库不能获得较好的执行计划,都可以自己通过程序来实现JOIN。 例如:SELECT a.*,b.* FROM a,b WHERE a.col1=b.col1 AND a.col2 10 ORDER BY a.col2; 可以利用程序实现,先SELECT * FROM a WHERE a.col210 ORDER BY a.col2;--(1) 利用(1)的结果集,做循环,SELECT * FROM b WHERE b.col1=a.col1; 这样可以避免排序,可以在

文档评论(0)

shenlan2 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档