自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(42)
  • 资源 (6)
  • 收藏
  • 关注

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

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

2016-06-13 21:21:31 518

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

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

2016-06-12 21:00:26 748

原创 innoDB源码分析--缓冲池

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

2016-06-12 20:59:01 496

原创 MySQL的loose index scan

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

2015-12-12 22:29:40 448

原创 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

2015-12-12 22:15:43 427

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

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

2015-12-12 22:05:12 713

原创 不好的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

2015-12-12 22:02:36 405

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

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

2013-12-18 20:42:10 1867

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

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

2013-11-29 22:15:47 1578

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

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

2013-11-15 21:39:37 737

原创 kettle初探

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

2013-07-13 01:25:44 1502

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

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

2013-06-01 21:11:05 824

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

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

2013-03-28 20:28:44 989

原创 有关分区表的另一点

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

2013-03-09 21:33:55 629

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

今天收到一个同事的问题,有一段SQL跑了很久很久,根本没有结果,根据同事的反映,这个SQL一个月比一个月要慢。这是不被允许的事情,我们要做的就是对这个SQL进行一次优化。下面就是这次优化的记录。     首先说SQL:select t.month_id, t1.area_id, t1.local_id, count(distinc

2013-01-08 14:31:06 760

原创 一次优化记录

今天收到一个同事的求助,说有一个SQL跑了一个多小时没有结果。我看了看,这个SQL是这样的(隐藏了敏感信息):    SELECT 电话号码, 列2, 列3, MAX(STARTTIME), FLAG FROM 表1 T1 WHERE FLAG = '0' AND 电话号码 NOT IN (SELECT 电话号码 FROM 表2 T2) GROUP BY 电话号码, 列2

2012-11-23 09:07:14 684

原创 一周以来工作总结--关于位图索引

我曾经迷茫于一个问题,为什么有的时候明明有索引,却无法提升效率。后来我在很多书上和论坛上看到,索引分为3种,默认的是B树索引,这个类型的索引在对付重复很多很多的列的时候并没有任何优势,比如性别列这个只有两个值(不排除会有第三值)的列。而这种重复度很高的列在我平时的生产系统中非常多,比如运营商的行政区列,西安市只有市区,户县,周至,蓝田等几个行政区,这种重复在百万级甚至千万级的表中属高重复的。那么这

2012-10-25 20:40:33 1024

原创 一周以来的工作总结--oracle分区的迁移

这周很平静,没有客户的纷纷扰扰。     前一阵子写了一些有关数据表的压缩的东西,我现在感觉把数据压缩了迁移走,或者直接迁移走也是一种不错的办法。     现在有这样一张表:     CREATE TABLE TABLE_1 ( MONTH_ID VARCHAR2(10), AREA_ID VARCHAR2(10), SERI NUMBER

2012-10-17 21:52:59 1211 2

原创 再学学表的分区

前一阵子一直在研究着Oracle的表分区的相关知识。在数据量不断扩大的现在,分区技术是一种非常有效的提高效率的技术。     限于业务的原因,我以前每次建立分区表的时候都喜欢用日期进行分区,每天一个range分区。但是突然有一天我遇到了一个很讨厌的表,是一个对应关系表,只有产品和销售品的对应关系,这个样子的表是没有办法建立我最熟悉的range分区的,经过我查阅资料以后我发现hash分区是一

2012-09-28 19:34:13 764

原创 关于分区表的初探

以前我写了一篇博文,里面有一点关于分区表的论述(http://www.cnblogs.com/wingsless/archive/2012/02/04/2338292.html)。但是我发现我少写了一点,在你的查询条件和分区列没有太大关系的时候,分区表不会帮助你提高效率。     图1图2     我是按照area_id分区的,图1的执行计划:

2012-09-27 22:18:50 570

原创 一周以来工作总结--关于表的压缩

昨天写了一下关于Oracle表压缩的问题(http://www.cnblogs.com/wingsless/archive/2012/09/23/2699309.html),由于时间原因没有具体的实验,只是使用了网上的资料,但是这并不是我的风格,因为网上资料直接拿来转载的多,自己原创的少。所谓事必躬亲嘛,做个实验。     有两张表,一张压缩(TEST_1)一张不压缩(TEST)。

2012-09-24 22:33:25 725

原创 一周以来的工作总结

这周客户的问题非常多,总是说我的数据不对。于是我对数据梳理了以后发现以前认为是重复数据的,其实并不是,而是我忽略了一个维度。那么这样一来,我们的周详单表就会有500多万的数据。一个月按照4周计算,就要有2000万条数据。而我大概计算了一下,每一个周的分区要占用2G多的存储空间,要知道电信给我们的空间不过是500G左右,我们大家都在用,我一个人每周消耗2G,显然不合适。      这个时候有

2012-09-24 22:32:42 688

原创 MongoDB初识

近年来数据库界最红的无疑是noSQL了,大佬oracle也开始搞了。对于非关系型数据库我还不是很了解,因此开始学习比较好上手的mongoDB好了。定时的做笔记也是学习的十分好的习惯。     1 数据库软件的安装。其实MongoDB(windows版本)是绿色的。这是非常好的事情,不用等待好久去安装了。在官网上(http://www.mongodb.org/downloads)就可以下载,

2012-03-10 16:41:32 529

原创 简介如何查看执行计划以及执行计划的准确性

很多朋友都问过我优化SQL的事情。我觉得在我不断地鼓励下,很多朋友现在都知道优化SQL之前要先看看执行计划,也在优化中获得了很多快乐。但是今天有人问我执行计划应该怎么看。我觉得这是个值得写一写的东西。      先告诉大家一个原则,看执行计划的时候,从第一行开始向右下看,一直到最右边。如果有并列的,那么先上再下。如果没并列,右边的先执行。      闲话少说,先上图吧:

2012-02-24 20:43:29 711

原创 一周以来遇到的问题和经验(oracle)

很久以前,在我还在X唐电信的时候,我被领导要求优化一段SQL。说真的那个时候我根本不知道SQL的优化为何物,但是百度google之后我发现所有的资料都写有这么一条:把选择性大的条件子句写在最后。因为oracle在执行的时候从底向顶执行。这句话我当时笃信不疑。可是后来我查到更多资料以及对SQL优化有了更深的理解之后,我发现那句话是RBO,而现在的oracle采取CBO。那么SQL到底是不是从下向上执

2012-02-18 22:18:21 902 1

原创 一周以来的工作学习总结

上周我写了一篇博文,里面有一点关于分区表的论述(http://blog.csdn.net/uncle_six/article/details/7233958)。但是我发现我少写了一点,在你的查询条件和分区列没有太大关系的时候,分区表不会帮助你提高效率。     图1图2     我是按照area_id分区的,图1的执行计划:     图2的执行计划:

2012-02-11 21:43:22 1211

原创 对WITH和from(select ...)的一点比较

在之前的工作中,我曾经遇到过表特别大的情况,这个时候我想到了使用with来降低查询的消耗,前文中已经有了描述:http://blog.csdn.net/uncle_six/article/details/7203078。今天我突然想到,其实用with和from (select)应该没有本质的差别。所以做了个小实验。         我的表大概7W行,使用with的SQL语句如下:

2012-02-04 21:18:48 886

原创 rank() over(partition)的使用

有的时候会遇到这样的问题,我们需要查询一张表,而且要按照业务排序,比如我需要如下的结果:    地区   日期    费用  产品编号   用户编号     290 201202 258 1              s1     290 201202 200 1              s5     290 201202 100 1              s100

2012-02-04 21:02:08 1163

原创 使用WITH提高查询效率

前两天的业务需求里需要关联好几张表出一个详单报表,这个需求其实很简单,但是数据量大,源表又不是分区表,就变得很头疼了。     最初我的代码大概是这样子的:select a.id,a.name,a.code,b.type,( select p_name from C c where c.pid = b.pid)from A a, B bwhere a.id = b.id

2012-01-15 20:57:52 1114

原创 好用的函数sign和decode

今天遇到了一个问题,需要对比一个字段和5的大小,大于5的输出0,小于五的输出1。如果是用PLSQL编程的话可以用if/else这种逻辑进行判断,但是在SQL里可不能这么写,经过网友推荐,我组合使用了sign和decode,效果很好,代码小清新。      代码如下:      DECODE(SIGN(TRUNC(COL1 - COL2) - 5), 1, 0, 1) ONT

2012-01-08 00:08:33 639

原创 有关LGWR

今天群里有人问关于数据库进程的事情,当然,他对oracle的后台进程不是很熟悉。当时我举了个例子,是关于LGWR,但是由于我学艺不精,当时只想起来了这个进程会被commit激发,实在是贻笑大方。回来以后查了一下书,于是记录在此,也算是和大家的分享吧。     LGWR被触发的情况:     1 commit。在提交之后,oracle会先把确认信息写到日志缓冲区里,然后再激发LGWR

2011-12-28 21:38:11 1381

原创 安装oracle时还需要修改的几个文件和参数

安装oracle时还需要修改的几个文件和参数:/etc/security/limits.confnproc:可以开启的进程数量nofile:可以开启的文件数量/etc/pam.d/login,改成这样:#Add for Install Oracle Database 11gsession required  /lib/security/pam

2011-12-24 23:30:03 814 1

原创 关于oracle的启动

有这么一道题,是关于在实例启动的时候,哪些文件在某个阶段是不是可以改动的,我觉得这个题是一个很基础的题,对于理解oracle有很大的帮助。于是我就查了一下相关资料,分享一下,适合初学者看。     1 shutdown-->nomount:     读取参数文件,根据参数文件的记录,配置SGA,启动后台进程。这个阶段因为只读取了参数文件,因此能干的事情不少:建立数据库;重建控制文件

2011-12-24 22:49:31 415

原创 oracle控制文件的一点研究

控制文件是非常重要的文件,实例读取控制文件才能到mount状态。DBA的一个原则就是多路控制文件,今天我就做了个实验,学习了一下这个。      代码如下:alter system set control_files='D:\app\wings\oradata\testdb\CONTROL03.CTL','D:\app\wings\oradata\testdb\CONTROL04.CTL' s

2011-12-13 23:08:38 407

原创 SQL语句的执行过程

服务器接收到SQL语句之后,要经过如下步骤完成操作:Parse(解析)—> Bind(绑定)—> Execute(执行)。    画个流程图比较明显的表示了这些过程:        下面说明执行的具体细节:     1 Select(查询)               2 INSERT/DELETE/UPDATE    这些都是对数据进行修改的语句,画个

2011-12-13 21:16:03 452

原创 OCP题库笔记1z0-052

1 关于undo数据库可以有一个以上的undo表空间;undo段可以自动增长,按需shrink2 关于Oracle Data Dump export和importimport操作同时可以更改表名;可以在export操作期间重写一个存在的dumpfile。3 关于无效索引会被优化器忽略;只能通过rebuild生效。4 关于监听多个监听能

2011-12-12 22:17:26 923

原创 如何理解oracle实例(instance)和数据库(database)的概念

今天群里有朋友问什么是instance,什么是database。于是群友七嘴八舌的说了很多很理论很理论的东西,这些东西网上很多,如果提问者能看懂的话也就不问我们了。很显然,提问者刚刚接触oracle,这个问题是困扰oracle新丁的一个常见问题。     我举个通俗易懂的例子,虽然不是很恰当,但是对于初学者理解instance和database很有帮助。     我的C:\下放了一个文本文

2011-12-11 10:25:26 574

原创 学习绑定变量

学习一下这个有意思的东西。      绑定变量能够有效的降低硬解析。这里需要查询几个视图:v$mystat,v$statname,v$sqlarea。      先查一下现在系统存在的解析数:select name, value from v$mystat a, v$statname b where a.STATISTIC# = b.STATISTIC# and b.N

2011-12-10 01:48:13 484

原创 Linux安装oracle时需要修改的系统参数具体说明

装了无数次oracle,一直都是按照文档更改/etc/sysctl.conf的参数,却从没有想过为什么,这些是什么,今天终于查到了,共享之。             这幅图片上的内容来自于《oracle管理艺术》(台湾地区)申建忠 著 ISBN 978-7-302-24131-7。不敢说这是我原创的,要标明出处。顺便推荐一下这本书,这是一本好书,作者把很多平时我们知道怎么做,但是不知道为什

2011-12-10 01:09:10 853

原创 DBA管理常用SQL(未完待续)

查询锁表:        select sess.SID, sess.SERIAL#, sess.USERNAME, decode(l.LMODE, 0, 'none', 1, 'null', 2,

2011-12-09 23:32:31 501

convert mysql to oracle 工具

convert mysql to oracle 工具,可以将MySQL轻松转换成Oracle

2018-01-09

美河提供.数据库性能调优.原理与技术.pdf

美河提供.数据库性能调优.原理与技术.pdf

2012-11-28

Oracle题库1Z0-042

这么好的东西,我就收1分,很给面子了。祝考试顺利

2011-12-10

OCP考试模拟器047

047考试模拟器

2011-12-09

OCP考试模拟器043

043考试模拟器,你懂的,只要1分。希望你考试通过。谢谢下载。

2011-12-09

OCP题库模拟器042

042考试模拟器,你懂的,只要1分。希望你考试通过。谢谢下载。

2011-12-09

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除