木匠的微型博客 Charlie Twitter

    follow me on Twitter
    Showing posts with label book. Show all posts
    Showing posts with label book. Show all posts

    Thursday, February 19, 2009

    读书笔记Oracle Database 10g Performance Tuning Tips & Techniques

    自讽一下: 昨晚LD限制我的上网时间,强行断网,关电脑,拔电源.我一着急,把这篇中文题目发到我的英文博客上了. 再来一遍.

    截至今晚,又读完了下面三章
    8: Query Tuning: Developer and Beginner DBA
    9: Table Joins and Other Advanced Tuning (Advanced DBA and Developer)
    10:Using PL/SQL to Enhance Performance (Developer and DBA)
    和11章 Tuning RAC and Using Parallel Features的一半.

    鄙人(IMHO)猜测这本书就是把多个人(大部分是TUSC员工)的文章,简单拼凑在一起,凑和着出版了一本书,不建议读者购买.

    不过, 第9章介绍了3个新颖的技术.

    1) Block Dump
    教会我开始使用Block Dump, 读trace文件里面的一些基本内容, 比如ITL锁, 列的数据类型和数据内容.
    下一篇文章,关于Fetch Across Commit最差实践,会引用一些Block Dump作为例证.

    2) Tuning Using Simple Mathematical Techniques
    原以为小学数学知识足以支持数据库管理和开发. 这下竟然用到了初中的数学知识.
    这部分知识讲了如何用二元一次线性方程(Simple Linear Equation),和二元二次方程(Quadratic)预测SQL的性能, 真新鲜,找机会试试.

    3) Join Tuning: Relational vs. Object-Relational Performance
    三种表连接(Nested-loop, Sort-Merge, Hash join), 把对象表作为物理存储结构的性能竟然远远好过普通表(heap table), 难以置信. 我认为写的性能比较差, 应该不适合OLTP系统, 找时间Benchmark一下.
    记得Tom的书里面不推荐Object-Relational表存储, 把Object-Relational结构拿来编程还行.

    Richard J. Niemiec 老兄讲了, 读完并理解了第9章,您就是高级数据库调优专家,并且站到了Richard J. Niemiec的高度,探索到无尽的喜悦.

    "If you’ve read and understood this entire chapter, you’re probably among the top-tuning
    professionals and you will see the heights and joys that I’ve seen with tuning Oracle."

    参考我14年的数据库经验(4年学习,10年荒废),鄙人木匠(IMHO)以为, 万里长征才刚刚开始, 读完并理解了第9章, 我才发现好多东西他都没有讲到,或者涉水太浅,要走的路还长着哩.


    BC Ferries 的轮渡缓缓驶离温哥华码头.

    Tuesday, February 10, 2009

    新学到的一些 SQL hints

    今年买了四本Oracle数据库方面的新书,其中Richard J. Niemiec的Oracle Database 10g Performance Tuning Tips & Techniques 比较旧,讲10gR2, 有1000多页,只能走马观花的快速浏览了.

    我刚刚读完前7章, 感觉内容平平,
    Chapter 1: Oracle Database 10g New Features (DBA and Developer) . . . 蜻蜓点水
    Chapter 2: Basic Index Principles (Beginner Developer and Beginner DBA) . . . 跳过
    Chapter 3: Disk Implementation Methodology and ASM (DBA) . . .飞速翻阅
    Chapter 4: Tuning the Database with Initialization Parameters (DBA) . . .没啥新鲜的
    Chapter 5: Enterprise Manager and Grid Control . . .跳过
    Chapter 6: Using EXPLAIN and STORED OUTLINES . . . 过时的内容,跳过
    Chapter 7: Basic Hint Syntax (Developer and DBA) . . .点到为止
    希望在后面这几章里找到一些实用新鲜的知识.
    8: Query Tuning: Developer and Beginner DBA
    9: Table Joins and Other Advanced Tuning (Advanced DBA and Developer)
    11:Using PL/SQL to Enhance Performance (Developer and DBA)
    15:Performing a Quick System Review (DBA)

    下面看看我新学的3个SQL Hint,
    • NO_EXPAND
    当我们的查询条件中有多个OR组合或者IN-list时, 阻止优化器将SQL转换成多个Union All查询.

    select * from emp
    where (emp_no = 1 or emp_no = 2 or emp_no = 3);


    USE_CONCAT Hint的作用正好相反.

    • PUSH_SUBQ
    当子查询返回较少数据时,并且有利于整个SQL的优化(比如降低逻辑读,减少表连接结果集,等等),优先考虑执行子查询,返回子查询的结果集.
    • QB_NAME
    当我们的查询看起来凌乱不堪,丑陋恶心时,QB_Name可以帮助你精确定位和指定需要的Hint.
    SELECT /*+ QB_NAME(qb) FULL(@qb e) */ employee_id, last_name
    FROM employees e
    WHERE last_name = 'Smith';
    参考:
    Oracle® Database SQL Language Reference
    11g Release 1 (11.1)
    Comments一节


    维多利亚的Swartz Bay码头,从这里搭船去温哥华,各种小汽车,货车就这样排着队,开进轮船的肚子里.

    这回坐上了一艘最大渡轮.轮船驶出码头,开往温哥华.


    Vancouver - Victoria (Tsawwassen-Swartz Bay) 这个航道是世界上最美丽的两个线路之一,另一个在欧洲啥地方.
    只可惜是阴天傍晚,拍不出它的壮美.

    Monday, January 19, 2009

    Learn from Oracle book 读书学习数据库

    首先热烈庆祝今天读完了老刘(Lewis)的Cost Based Oracle Fundamentals附录A附录B,就此读完了全书.欢迎客官您将各种SQL执行计划和优化器方面的疑难问题放马过来,让木匠尝试一下新学的功夫.

    开卷有益,静下心来读书是吸取知识的最快途径之一, 再结合试验,进步更是飞快.
    书中自有黄金屋,书中自有颜如玉,对第二点还没啥体会,您有的话,介绍一下.

    2008年上半年读完了Steven Feuerstein的Oracle PL/SQL Best Practices, 2nd Edition: October 2007, ISBN 13: 9780596514105. 感觉PL/SQL功力暴增,从菜牛一跃变为牛人,读完了Doing SQL from PL/SQL: Best and Worst Practices更是进入了超一流选手的行列,充满自信.

    2008年10月11月,花了两个月时间完成了瑞士人Christian Antognini的Troubleshooting Oracle Performance. 读了一半,节奏缓慢,等读完了所有章节,才明白了前半部分铺垫的意义,盖房子要有一个好的根基. 作者虽然母语不是英语,开始读的时候稍有不适,慢慢的,发现他的文章却是平铺直叙,拿捏得体,易于理解,所以读书进度很快.

    扯远一点,1994年偶然在公司(西安思维)捡到一本Code Complete(代码大全)中文译本,爱不释手,但也只是蜻蜓点水,学到一点皮毛.现在我手里正拿着Code Complete的原版.
    代码大全里讲的软件开发有几种比喻(Metaphor), 比如软件书写(Penmanship,写作),软件农场(种庄稼/耕作Farming),软件堆积(养牡蛎Oyster Farming) 和 软件构造(Construction/Building,构建软件).
    我同作者一样,喜欢盖房子这个比喻,房屋的根基和房屋的构造规划都很重要.

    2008年5月开始读CBO Fundamentals,这本书真是难啃,内容不易理解,断断续续,每天大概5页,9月份卡在第十三章Sorting and Merge Joins,圣诞节又拾起这本书,一鼓作气,冲过难关,读完了剩余部分,特别是读完14章The 10053 Trace File,贯穿全剧,对CBO的认识又上了一层台阶.
    我对英国英语不太适应,Doing SQL from PL/SQL: Best and Worst Practices的作者也是英国人,读起来相当吃力,改天我把所有20个要点及示例重新写一遍.

    下一个目标是Richard J. Niemiec的Oracle Database 10g Performance Tuning Tips & Techniques, 1000页,每天十页,计划100天(3个月)读完.粗粗翻了一下,此人标准美国英语,文笔通俗易懂,按时完成目标问题不大.


    2005年7月刚到加拿大时,从旅馆到办公室的路上, 距离办公室有300米,中午常到这里散步.