楼主: mchdba

MySQL知识点技能点总结贴--个人版!

[复制链接]
论坛徽章:
27
优秀写手
日期:2013-12-18 09:29:09ITPUB季度 技术新星
日期:2012-08-15 14:50:13嫦娥
日期:2013-03-04 09:47:05数据库板块每日发贴之星
日期:2011-09-08 01:01:01数据库板块每日发贴之星
日期:2011-09-11 01:01:01数据库板块每日发贴之星
日期:2011-09-10 01:01:02数据库板块每日发贴之星
日期:2011-09-09 01:01:01ITPUB十周年纪念徽章
日期:2011-11-01 16:26:59ITPUB 11周年纪念徽章
日期:2012-09-28 17:34:422013年新春福章
日期:2013-03-04 09:50:49
81#
 楼主| 发表于 2011-10-28 23:15 | 只看该作者
本帖最后由 mchdba 于 2011-10-28 23:46 编辑

-- 【MySQL 覆盖索引】 参考网址 http://www.searchdatabase.com.cn/showcontent_53221.htm  http://hi.baidu.com/shinegun/blog/item/e16f72b7184f36e530add189.html

 
     原来自己也做过类似的优化处理,就是尽量做到索引的唯一性和rang性,但是却不知道这样的统称叫覆盖索引。今天被一个前辈问起覆盖索引,我竟然楞住了,没有反应过来!
     覆盖索引就是select的数据列只用从索引中就能够取得,不必读取数据行,换句话说查询列要被所建的索引覆盖。
     如果你想要通过索引覆盖select多列,那么需要给需要的列建立一个多列索引,当然如果带查询条件,where条件要求满足最左前缀原则。
     如果explain之后,输出的Extra信息中如果有“Using Index”,就表示这条查询使用了覆盖索引,能使用覆盖索引的先决条件是不能select * from tb  where xxxx;
      
    再比如说在文章系统里分页显示的时候,一般的查询是这样的:
    SELECT id, title, content FROM article ORDER BY created DESC LIMIT 10000, 10;
   通常这样的查询会把索引建在created字段(其中id是主键),不过当LIMIT偏移很大时,查询效率仍然很低,改变一下查询:
   SELECT id, title, content FROM article
   INNER JOIN (
          SELECT id FROM article ORDER BY created DESC LIMIT 10000, 10
    ) AS page USING(id)
   此时,建立复合索引"created, id"【只要建立created索引就可以吧,Innodb是会在辅助索引里面存储主键值的】,就可以在子查询里利用上Covering Index,快速定位id,查询效率会提升很大。

使用道具 举报

回复
论坛徽章:
27
优秀写手
日期:2013-12-18 09:29:09ITPUB季度 技术新星
日期:2012-08-15 14:50:13嫦娥
日期:2013-03-04 09:47:05数据库板块每日发贴之星
日期:2011-09-08 01:01:01数据库板块每日发贴之星
日期:2011-09-11 01:01:01数据库板块每日发贴之星
日期:2011-09-10 01:01:02数据库板块每日发贴之星
日期:2011-09-09 01:01:01ITPUB十周年纪念徽章
日期:2011-11-01 16:26:59ITPUB 11周年纪念徽章
日期:2012-09-28 17:34:422013年新春福章
日期:2013-03-04 09:50:49
82#
 楼主| 发表于 2011-10-29 00:01 | 只看该作者
本帖最后由 mchdba 于 2011-10-29 00:02 编辑

-- xtrabackup备份的原理

XtraBackup基于InnoDB的crash-recovery功能。
它会复制innodb 的data file,由于不锁表,复制出来的数据是不一致的,
在恢复的时候使用crash-recovery,使得数据恢复一致。

InnoDB维护了一个redo log,又称为 transaction log,重做日志,undo日志在ibd数据文件里面。
它们包含了innodb数据的所有改动情况。
当InnoDB启动的时候,它会先去检查data file和transaction log,并且会做二步操作:
1.It applies committed transaction log entries to the data files  -- redo
2.it performs an undo operation on any transactions that modified data but did not commit. --undo

XtraBackup在备份的时候, 一页一页地复制innodb的数据,而且不锁定表,
与此同时,XtraBackup还有另外一个线程监视着transactions log,
一旦log发生变化,就把变化过的log pages复制走。
因为transactions log文件大小有限,写满之后,就会从头再开始写,
所以新数据可能会覆盖到旧的数据。

在prepare过程中,XtraBackup使用复制到的transactions log 对备份出来的innodb data file 进行crash recovery。

所以一般xtraBackup出来的全备文件大小会比原来的要大,因为它记载了相关的很多信息,我的生产环境大概是1.6倍-2倍之间吧。

参考 http://hi.baidu.com/wongxuelei/blog/item/dd7490ee312a3befb3fb9524.html

使用道具 举报

回复
论坛徽章:
27
优秀写手
日期:2013-12-18 09:29:09ITPUB季度 技术新星
日期:2012-08-15 14:50:13嫦娥
日期:2013-03-04 09:47:05数据库板块每日发贴之星
日期:2011-09-08 01:01:01数据库板块每日发贴之星
日期:2011-09-11 01:01:01数据库板块每日发贴之星
日期:2011-09-10 01:01:02数据库板块每日发贴之星
日期:2011-09-09 01:01:01ITPUB十周年纪念徽章
日期:2011-11-01 16:26:59ITPUB 11周年纪念徽章
日期:2012-09-28 17:34:422013年新春福章
日期:2013-03-04 09:50:49
83#
 楼主| 发表于 2011-10-30 13:15 | 只看该作者
623422929 发表于 2011-10-29 01:06
好东西收藏了···
南宁空调维修

上周遇到一题目,让我画出MySQL的体系结构,结果我凭以前的理解画了画,感觉有点乱糟糟的,今天google出来,一张图,觉得画得真好,思路逻辑很清晰的,呵呵!


使用道具 举报

回复
论坛徽章:
52
2015年新春福章
日期:2015-03-06 11:57:312012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:25生肖徽章2007版:龙
日期:2012-02-07 10:33:22生肖徽章2007版:龙
日期:2012-02-07 10:33:22生肖徽章2007版:龙
日期:2012-02-07 10:33:22生肖徽章2007版:龙
日期:2012-02-07 10:33:22生肖徽章2007版:龙
日期:2012-02-07 10:33:22生肖徽章2007版:龙
日期:2012-02-07 10:32:552012新春纪念徽章
日期:2012-02-07 09:59:35
84#
发表于 2011-11-1 23:22 | 只看该作者
mchdba 发表于 2011-10-30 13:15
上周遇到一题目,让我画出MySQL的体系结构,结果我凭以前的理解画了画,感觉有点乱糟糟的,今天google出来 ...

看来是你做的题目,是我出的....

像这类体系架构图,重点在理解,不一定每个模块都能画出来.....

官方手册上有此图的....

使用道具 举报

回复
论坛徽章:
27
优秀写手
日期:2013-12-18 09:29:09ITPUB季度 技术新星
日期:2012-08-15 14:50:13嫦娥
日期:2013-03-04 09:47:05数据库板块每日发贴之星
日期:2011-09-08 01:01:01数据库板块每日发贴之星
日期:2011-09-11 01:01:01数据库板块每日发贴之星
日期:2011-09-10 01:01:02数据库板块每日发贴之星
日期:2011-09-09 01:01:01ITPUB十周年纪念徽章
日期:2011-11-01 16:26:59ITPUB 11周年纪念徽章
日期:2012-09-28 17:34:422013年新春福章
日期:2013-03-04 09:50:49
85#
 楼主| 发表于 2011-11-14 10:12 | 只看该作者
本帖最后由 mchdba 于 2011-11-14 10:16 编辑

某个生产库,磁盘空间不足50G,短时间之内cto又没法增加新的磁盘,为了在周末不被公司同事电话骚扰我,所以我不得不flush logs; 尽量不要让binlog日志来占用空间。

在第一天,我在执行
set global expire_logs_days=1;
flush logs;
清理掉了30G的日志空间。

过了3天,去查看磁盘空间,又只剩下50G了,而日志却是有3天之多,呵呵,有点奇怪set global expire_logs_days=1;不起作用吗?
看来的变通下了,重新设置参数为0;
set global expire_logs_days=0;
flush logs;
这回去看磁盘空间,还有67G。

set global expire_logs_days=1;这个设置不能让系统每天执行flush logs吗?看来要好好去看看set global expire_logs_days=1的具体原理了。

使用道具 举报

回复
论坛徽章:
1
ITPUB十周年纪念徽章
日期:2011-11-01 16:26:59
86#
发表于 2011-11-14 10:32 | 只看该作者

使用道具 举报

回复
论坛徽章:
27
优秀写手
日期:2013-12-18 09:29:09ITPUB季度 技术新星
日期:2012-08-15 14:50:13嫦娥
日期:2013-03-04 09:47:05数据库板块每日发贴之星
日期:2011-09-08 01:01:01数据库板块每日发贴之星
日期:2011-09-11 01:01:01数据库板块每日发贴之星
日期:2011-09-10 01:01:02数据库板块每日发贴之星
日期:2011-09-09 01:01:01ITPUB十周年纪念徽章
日期:2011-11-01 16:26:59ITPUB 11周年纪念徽章
日期:2012-09-28 17:34:422013年新春福章
日期:2013-03-04 09:50:49
87#
 楼主| 发表于 2011-11-14 10:32 | 只看该作者
本帖最后由 mchdba 于 2011-11-14 16:59 编辑

The number of days for automatic binary log file removal. The default is 0, which means “no automatic removal.” Possible removals happen at startup and when the binary log is flushed. Log flushing occurs as indicated in Section 5.2, “MySQL Server Logs”.

To remove binary log files manually, use the PURGE BINARY LOGS statement. See Section 12.5.1.1, “PURGE BINARY LOGS Syntax”.


再看得出的参数设置:
mysql> show variables like 'expire_logs_days';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| expire_logs_days | 0     |
+------------------+-------+
1 row in set (0.00 sec)
mysql> show variables like '%flush%';
+--------------------------------+-------+
| Variable_name                  | Value |
+--------------------------------+-------+
| flush                          | OFF   |
| flush_time                     | 0     |
| innodb_adaptive_flushing       | ON    |
| innodb_flush_log_at_trx_commit | 2     |
| innodb_flush_method            |       |
+--------------------------------+-------+
5 rows in set (0.02 sec)
mysql>

使用道具 举报

回复
论坛徽章:
11
鲜花蛋
日期:2011-09-03 18:52:38鲜花蛋
日期:2011-11-09 10:10:12茶鸡蛋
日期:2011-11-19 22:46:41茶鸡蛋
日期:2011-12-14 15:16:572012新春纪念徽章
日期:2012-01-04 11:57:56奥运会纪念徽章:赛艇
日期:2012-09-26 21:40:11ITPUB 11周年纪念徽章
日期:2012-10-09 18:16:002013年新春福章
日期:2013-02-25 14:51:24
88#
发表于 2011-11-14 13:05 | 只看该作者
来张简化版的MySQL体系结构图吧  

使用道具 举报

回复
论坛徽章:
1
2012新春纪念徽章
日期:2012-01-04 11:58:44
89#
发表于 2011-11-14 16:56 | 只看该作者
收藏,
感谢撸主分享

使用道具 举报

回复
论坛徽章:
52
2015年新春福章
日期:2015-03-06 11:57:312012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:25生肖徽章2007版:龙
日期:2012-02-07 10:33:22生肖徽章2007版:龙
日期:2012-02-07 10:33:22生肖徽章2007版:龙
日期:2012-02-07 10:33:22生肖徽章2007版:龙
日期:2012-02-07 10:33:22生肖徽章2007版:龙
日期:2012-02-07 10:33:22生肖徽章2007版:龙
日期:2012-02-07 10:32:552012新春纪念徽章
日期:2012-02-07 09:59:35
90#
发表于 2011-11-16 10:45 | 只看该作者
mchdba 发表于 2011-11-14 10:12
某个生产库,磁盘空间不足50G,短时间之内cto又没法增加新的磁盘,为了在周末不被公司同事电话骚扰我,所以 ...

这个参数值为:0 就是不管
=N 且N>0 才起作用,而且日志是保留:N+1天(即当前天)的,日志删除发生在重新启动 或 日志文件切换,或执行FLUSH LOGS类强制命令


已经把你这贴加精华了,继续分享!!!

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表