关闭

InnoDB源码分析--缓冲池(三)

昨天写到了InnoDB缓冲池的预读:《InnoDB源码分析--缓冲池(二)》,最后因为着急看欧洲杯,没有把线性预读写完,今天接着写。      线性预读是由这个函数实现的:buf_read_ahead_linear,和随机预读一样,首先是要确定区域边界,这个边界内被访问过的page如果达到一个阈值(BUF_READ_AHEAD_LINEAR_THRESHOLD),就会触发预读操作。边界的算法...
阅读(278) 评论(0)

InnoDB源码分析--缓冲池(二)

上一篇中我简单的分析了一下InnoDB缓冲池LRU算法的相关源码,其实说不上是分析,应该是自己的笔记,不过我还是发扬大言不惭的精神写成分析好了。在此之后,我继续阅读了Buf0rea.c文件,因为这里写的就是如何将block读取到内存中的函数。     这个文件里很显眼的有这样一个函数:buf_read_page,这是一个高层的函数,它的作用就是:reads a page asynchrono...
阅读(393) 评论(0)

innoDB源码分析--缓冲池

最开始学Oracle的时候,有个概念叫SGA和PGA,是非常重要的概念,其实就是内存中的缓冲池。InnoDB的设计类似于Oracle,也会在内存中开辟一片缓冲池。众所周知,CPU的速度和磁盘的IO速度相差可以用鸿沟来形容,因此聪明的前辈们使用了内存这个ROM来弥补这道鸿沟,那么数据库的设计者们也继承了这个优良的设计理念,在内存中开辟了一片区域,存放缓冲数据,提高数据库效率。     可以将磁...
阅读(230) 评论(0)

MySQL的loose index scan

众所周知,InnoDB采用IOT(index organization table)即所谓的索引组织表,而叶子节点也就存放了所有的数据,这就意味着,数据总是按照某种顺序存储的。所以问题来了,如果是这样一个语句,执行起来应该是怎么样的呢?语句如下:      select count(distinct a) from table1;      列a上有一个索引,那么按照简单的想...
阅读(218) 评论(0)

MySQL有关Group By的优化

昨天我写了有关MySQL的loose index scan的相关博文(http://www.cnblogs.com/wingsless/p/5037625.html),后来我发现上次提到的那个优化方法中主要的目的就是实现loose index scan,而在执行计划的层面上看,Extra信息中应该是“Using index for group-by”。这样看来,可能MySQL在处理distinct...
阅读(200) 评论(0)

MySQL InnoDB表--BTree基本数据结构

MySQL InnoDB表是索引组织表这一点应该是每一个学习MySQL的人都会首先学到的知识,这代表这表中的数据是按照主键顺序存储,也就是说BTree的叶子节点存储了所有该行的数据。     我最开始是搞Oracle的,头一次接触MySQL的时候,默认引擎还是MyISAM。当时我看到公司建立的所有的InnoDB表都会在第一列加一个业务无关的自增主键,我觉得很没有必要,问了些人这么做的意义,得...
阅读(305) 评论(0)

不好的MySQL过程编写习惯

刚才为了测试一个东西,写了个存储过程:        delimiter $$ drop procedure if exists sp_test$$ create procedure sp_test() begin declare v_cnt int; set v_cnt = 0; while v_cnt 100000 do insert into t...
阅读(254) 评论(0)

从最近MySQL的优化工作想到的

最近决定将以前同事写的存储过程查看一遍,寻找一些代码上写的不太好的地方,争取进行修改以后让这些过程达到一个很好的运行速度。下面是遇到的最多的几个问题。     我遇到了这样的一个SQL:      select name, count(*) from (select name from table_1) a group by a.name;     MySQL的执行计划...
阅读(1574) 评论(0)

有关于存储过程的一个笑话

我真的是上来讲一个笑话的,这是个传统笑话,需要慢慢讲。      我同事离职以后,统计平台的所有代码就被我接过来了。这个统计平台是用MySQL搭建的,5.1版本,服务器是DELL的,有16个CPU和32G内存,700G的data空间,说真的这个配置对于我这种喜欢IOE的人来说实在是看不下去。      接过这个系统后我发现有一个过程需要跑三个小时,从前4点开始跑,到早上9点前也就出来了,于是也...
阅读(1349) 评论(0)

Mysql的float类型造成的困扰总结

因为换了工作正在学习使用MySQL,今天领导提出了一个问题,如下:         X列是累加值,A列是每日新增值,那么X2应该是X1+A1,而且存储过程里也是这样计算的。可是奇怪的是X2的值却总是和正确值(2396116766)有一定的差异。于是我手工进行了update,但是没有办法,数据永远是:2396116736。在我百思不得其解的时候我决定看看这个表怎么建立的,我发现这个字段是flo...
阅读(479) 评论(0)

kettle初探

Kettle是Pentaho的一个组件,主要用于数据库间的数据迁移,到我用过的4.2版,还不支持noSQL,不知道4.4是不是支持了。      Kettle自己有三个主要组件:Spoon,Kitchen,Pan。其中Spoon是一个图形化的界面,用于windows的时候,先设置环境变量:pentaho_java_home,例如:C:\Program Files\Java\jdk1.7.0_...
阅读(1284) 评论(0)

Ubuntu下有关Java和数据库的一些工作记录(一)

我希望用程序生成一些测试数据,测试一下开源数据库中哪个比较适合我们的数据仓库项目,于是有了这篇随笔。       其实测试数据可以用过程生成,但是我想学学java因此决定用程序实现。而且我先在把windows这个让我一打开电脑就想娱乐的系统卸载了,现在纯Ubuntu。       先记录下Java的配置:       首先需要下载Java,这是一个很简单的过程,链接在这里:htt...
阅读(715) 评论(0)

一周工作总结--左连接造成的一些问题

今天有同事告诉我,有个SQL执行了好久好久执行不出来,我说好就是多久?她说一天左右了。真是令人咋舌的SQL。于是我要来了SQL看了看执行计划,确实让人咋舌。      下图中就是执行计划的截图:            25G的COST和75T的Bytes确实是无法承受之重。这个SQL是这样子的:              select部分做了很多sum运算,还有dis...
阅读(792) 评论(0)

有关分区表的另一点

很久以前写了一个关于分区表的博文(http://www.cnblogs.com/wingsless/archive/2012/08/06/2625809.html),后来在实际的工作中发现,我们的存储过程中存在很多这样子的写法:       CREATE OR REPLACE PROCEDURE P_TEST_PAR(V_DAY IN VARCHAR2)...
阅读(504) 评论(0)

一周工作总结--一次SQL优化记录

今天收到一个同事的问题,有一段SQL跑了很久很久,根本没有结果,根据同事的反映,这个SQL一个月比一个月要慢。这是不被允许的事情,我们要做的就是对这个SQL进行一次优化。下面就是这次优化的记录。      首先说SQL: select t.month_id, t1.area_id, t1.local_id, count(distinc...
阅读(615) 评论(0)
42条 共3页1 2 3 下一页 尾页
    个人资料
    • 访问:30680次
    • 积分:771
    • 等级:
    • 排名:千里之外
    • 原创:42篇
    • 转载:0篇
    • 译文:0篇
    • 评论:5条
    最新评论