出版時(shí)間:2010-11-19 出版社:機(jī)械工業(yè)出版社 作者:姜承堯 頁數(shù):391
Tag標(biāo)簽:無
前言
過去這些年,我一直在和各種不同的數(shù)據(jù)庫打交道,見證了MySQL從一個(gè)小型的關(guān)系型數(shù)據(jù)庫發(fā)展成為各大企業(yè)的核心數(shù)據(jù)庫系統(tǒng)的過程,并且參與了一些大大小小的項(xiàng)目的開發(fā)工作,成功地幫助開發(fā)人員構(gòu)建了一些可靠、健壯的應(yīng)用程序。在這個(gè)過程中積累了一些經(jīng)驗(yàn),正是這些不斷累積的經(jīng)驗(yàn)賦予了我靈感,于是有了本書。。這本書實(shí)際上反映了這些年來我做了哪些事情,匯集了很多同行每天可能都會(huì)遇到的一些問題,并給出了解決方案。 MySQL數(shù)據(jù)庫獨(dú)有的插件式存儲(chǔ)引擎架構(gòu)使得它與其他任何數(shù)據(jù)庫都不同,不同的存儲(chǔ)引擎有著完全不同的功能,而InnoDB存儲(chǔ)引擎的存在使得MysQL躍入了企業(yè)級(jí)數(shù)據(jù)庫領(lǐng)域.本書完整地講解了InnoDB存儲(chǔ)引擎中最重要的一些內(nèi)容.即InnoDB的體系結(jié)構(gòu)和工作原理,并結(jié)合InnoDB的源代碼講解了它的內(nèi)部實(shí)現(xiàn)機(jī)制?! ”緯粌H介紹了InnoDB存儲(chǔ)引擎的諸多功能和特性,而且還闡述了如何正確地使用這些功能和特性。
內(nèi)容概要
本書是國內(nèi)目前唯一的一本關(guān)于innodb的著作,由資深mysql專家親自執(zhí)筆,中外數(shù)據(jù)庫專家聯(lián)袂推薦,權(quán)威性毋庸置疑?! ?nèi)容深入,從源代碼的角度深度解析了innodb的體系結(jié)構(gòu)、實(shí)現(xiàn)原理、工作機(jī)制,并給出了大量最佳實(shí)踐,能幫助你系統(tǒng)而深入地掌握innodb,更重要的是,它能為你設(shè)計(jì)和管理高性能、高可用的數(shù)據(jù)庫系統(tǒng)提供絕佳的指導(dǎo)。注重實(shí)戰(zhàn),全書輔有大量的案例,可操作性極強(qiáng)?! ∪珪紫热笆降亟榻B了mysql獨(dú)有的插件式存儲(chǔ)引擎,分析了mysql的各種存儲(chǔ)引擎的優(yōu)勢(shì)和應(yīng)用環(huán)境;接著以innodb的內(nèi)部實(shí)現(xiàn)為切入點(diǎn),逐一詳細(xì)講解了innodb存儲(chǔ)引擎內(nèi)部的各個(gè)功能模塊,包括innodb存儲(chǔ)引擎的體系結(jié)構(gòu)、內(nèi)存中的數(shù)據(jù)結(jié)構(gòu)、基于innodb存儲(chǔ)引擎的表和頁的物理存儲(chǔ)、索引與算法、文件、鎖、事務(wù)、備份,以及innodb的性能調(diào)優(yōu)等重要的知識(shí);最后深入解析了innodb存儲(chǔ)引擎的源代碼結(jié)構(gòu),對(duì)大家閱讀和理解innodb的源代碼有重要的指導(dǎo)意義?! ”緯m合所有希望構(gòu)建和管理高性能、高可用性的mysql數(shù)據(jù)庫系統(tǒng)的開發(fā)者和dba閱讀。
作者簡(jiǎn)介
姜承堯,資深MySQL數(shù)據(jù)庫專家,不僅擅長(zhǎng)于數(shù)據(jù)庫的管理和維護(hù),還擅長(zhǎng)子數(shù)據(jù)庫的開發(fā)。一直致力于MySQL數(shù)據(jù)庫底層實(shí)現(xiàn)原理的研究和探索,對(duì)高性能數(shù)據(jù)庫和數(shù)據(jù)倉庫也有深刻而獨(dú)到的見解。曾為MySQL編寫了許多開源工具和性能擴(kuò)展補(bǔ)丁,如廣受好評(píng)的InnoDB引擎二級(jí)緩存項(xiàng)目?,F(xiàn)任久游網(wǎng)數(shù)據(jù)庫工程部經(jīng)理,曾領(lǐng)導(dǎo)并參與了多個(gè)大型核心數(shù)據(jù)庫的設(shè)計(jì)、實(shí)施、管理和維護(hù),實(shí)戰(zhàn)經(jīng)驗(yàn)非常豐富?;钴S于開源數(shù)據(jù)庫和開源軟件領(lǐng)域,是著名開源社區(qū)ChinaUnixMySQL版塊的版主,熱衷于與網(wǎng)友分享自己的心得和體會(huì),深受社區(qū)歡迎。
書籍目錄
推薦序 前言 致謝 第1章 mysql體系結(jié)構(gòu)和存儲(chǔ)引擎 1.1 定義數(shù)據(jù)庫和實(shí)例 1.2 mysql體系結(jié)構(gòu) 1.3 mysql表存儲(chǔ)引擎 1.3.1 innodb存儲(chǔ)引擎 1.3.2 myisam存儲(chǔ)引擎 1.3.3 ndb存儲(chǔ)引擎 1.3.4 memory存儲(chǔ)引擎 1.3.5 archive存儲(chǔ)引擎 1.3.6 federated存儲(chǔ)引擎 1.3.7 maria存儲(chǔ)引擎 1.3.8 其他存儲(chǔ)引擎 1.4 各種存儲(chǔ)引擎之間的比較 1.5 連接mysql 1.5.1 tcp/ip 1.5.2 命名管道和共享內(nèi)存 1.5.3 unix域套接字 1.6 小結(jié) 第2章 innodb存儲(chǔ)引擎 2.1 innodb存儲(chǔ)引擎概述 2.2 innodb體系架構(gòu) 2.2.1 后臺(tái)線程 2.2.2 內(nèi)存 2.3 master thread 2.3.1 master thread源碼分析 2.3.2 master thread的潛在問題 2.4 關(guān)鍵特性 2.4.1 插入緩沖 2.4.2 兩次寫 2.4.3 自適應(yīng)哈希索引 2.5 啟動(dòng)、關(guān)閉與恢復(fù) 2.6 innodb plugin = 新版本的innodb存儲(chǔ)引擎 2.7 小結(jié) 第3章 文件 3.1 參數(shù)文件 3.1.1 什么是參數(shù) 3.1.2 參數(shù)類型 3.2 日志文件 3.2.1 錯(cuò)誤日志 3.2.2 慢查詢?nèi)罩? 3.2.3 查詢?nèi)罩? 3.2.4 二進(jìn)制日志 3.3 套接字文件 3.4 pid文件 3.5 表結(jié)構(gòu)定義文件 3.6 innodb存儲(chǔ)引擎文件 3.6.1 表空間文件 3.6.2 重做日志文件 3.7 小結(jié) 第4章 表 4.1 innodb存儲(chǔ)引擎表類型 4.2 innodb邏輯存儲(chǔ)結(jié)構(gòu) 4.2.1 表空間 4.2.2 段 4.2.3 區(qū) 4.2.4 頁 4.2.5 行 4.3 innodb物理存儲(chǔ)結(jié)構(gòu) 4.4 innodb行記錄格式 4.4.1 compact 行記錄格式 4.4.2 redundant 行記錄格式 4.4.3 行溢出數(shù)據(jù) 4.4.4 compressed與dynamic行記錄格式 4.4.5 char的行結(jié)構(gòu)存儲(chǔ) 4.5 innodb數(shù)據(jù)頁結(jié)構(gòu) 4.5.1 file header 4.5.2 page header 4.5.3 infimum和supremum記錄 4.5.4 user records與freespace 4.5.5 page directory 4.5.6 file trailer 4.5.7 innodb數(shù)據(jù)頁結(jié)構(gòu)示例分析 4.6 named file formats 4.7 約束 4.7.1 數(shù)據(jù)完整性 4.7.2 約束的創(chuàng)建和查找 4.7.3 約束和索引的區(qū)別 4.7.4 對(duì)于錯(cuò)誤數(shù)據(jù)的約束 4.7.5 enum和set約束 4.7.6 觸發(fā)器與約束 4.7.7 外鍵 4.8 視圖 4.8.1 視圖的作用 4.8.2 物化視圖 4.9 分區(qū)表 4.9.1 分區(qū)概述 4.9.2 range分區(qū) 4.9.3 list分區(qū) 4.9.4 hash分區(qū) 4.9.5 key分區(qū) 4.9.6 columns分區(qū) 4.9.7 子分區(qū) 4.9.8 分區(qū)中的null值 4.9.9 分區(qū)和性能 4.10 小結(jié) 第5章 索引與算法 5.1 innodb存儲(chǔ)引擎索引概述 5.2 二分查找法 5.3 平衡二叉樹 5.4 b+樹 5.4.1 b+樹的插入操作 5.4.2 b+樹的刪除操作 5.5 b+樹索引 5.5.1 聚集索引 5.5.2 輔助索引 5.5.3 b+樹索引的管理 5.6 b+樹索引的使用 5.6.1 什么時(shí)候使用b+樹索引 5.6.2 順序讀、隨機(jī)讀與預(yù)讀取 5.6.3 輔助索引的優(yōu)化使用 5.6.4 聯(lián)合索引 5.7 哈希算法 5.7.1 哈希表 5.7.2 innodb存儲(chǔ)引擎中的哈希算法 5.7.3 自適應(yīng)哈希索引 5.8 小結(jié) 第6章 鎖 6.1 什么是鎖 6.2 innodb存儲(chǔ)引擎中的鎖 6.2.1 鎖的類型 6.2.2 一致性的非鎖定讀操作 6.2.3 select ... for update & select ... lock in share mode 6.2.4 自增長(zhǎng)和鎖 6.2.5 外鍵和鎖 6.3 鎖的算法 6.4 鎖問題 6.4.1 丟失更新 6.4.2 臟讀 6.4.3 不可重復(fù)讀 6.5 阻塞 6.6 死鎖 6.7 鎖升級(jí) 6.8 小結(jié) 第7章 事務(wù) 7.1 事務(wù)概述 7.2 事務(wù)的實(shí)現(xiàn) 7.2.1 redo 7.2.2 undo 7.3 事務(wù)控制語句 7.4 隱式提交的sql語句 7.5 對(duì)于事務(wù)操作的統(tǒng)計(jì) 7.6 事務(wù)的隔離級(jí)別 7.7 分布式事務(wù) 7.8 不好的事務(wù)習(xí)慣 7.8.1 在循環(huán)中提交 7.8.2 使用自動(dòng)提交 7.8.3 使用自動(dòng)回滾 7.9 小結(jié) 第8章 備份與恢復(fù) 8.1 備份與恢復(fù)概述 8.2 冷備 8.3 邏輯備份 8.3.1 mysqldump 8.3.2 select ... into outfile 8.3.3 邏輯備份的恢復(fù) 8.3.4 load data infile 8.3.5 mysqlimport 8.4 二進(jìn)制日志備份與恢復(fù) 8.5 熱備 8.5.1 ibbackup 8.5.2 xtrabackup 8.5.3 xtrabackup實(shí)現(xiàn)增量備份 8.6 快照備份 8.7 復(fù)制 8.7.1 復(fù)制的工作原理 8.7.2 快照+復(fù)制的備份架構(gòu) 8.8 小結(jié) 第9章 性能調(diào)優(yōu) 9.1 選擇合適的cpu 9.2 內(nèi)存的重要性 9.3 硬盤對(duì)數(shù)據(jù)庫性能的影響 9.3.1 傳統(tǒng)機(jī)械硬盤 9.3.2 固態(tài)硬盤 9.4 合理地設(shè)置raid 9.4.1 raid類型 9.4.2 raid write back功能 9.4.3 raid配置工具 9.5 操作系統(tǒng)的選擇也很重要 9.6 不同的文件系統(tǒng)對(duì)數(shù)據(jù)庫性能的影響 9.7 選擇合適的基準(zhǔn)測(cè)試工具 9.7.1 sysbench 9.7.2 mysql-tpcc 9.8 小結(jié) 第10章 innodb存儲(chǔ)引擎源代碼的編譯和調(diào)試 10.1 獲取innodb存儲(chǔ)引擎源代碼 10.2 innodb源代碼結(jié)構(gòu) 10.3 編譯和調(diào)試innodb源代碼 10.3.1 windows下的調(diào)試 10.3.2 linux下的調(diào)試 10.4 小結(jié) 附錄a secondary buffer pool for innodb 附錄b master thread源代碼 附錄c doublewrite源代碼 附錄d 哈希算法和哈希表源代碼
章節(jié)摘錄
索引是應(yīng)用程序設(shè)計(jì)和開發(fā)的一個(gè)重要方面。如果索引太多,應(yīng)用的性能可能會(huì)受到影響;如果索引太少,對(duì)查詢性能又會(huì)產(chǎn)生影響。要找到一個(gè)合適的平衡點(diǎn),這對(duì)應(yīng)用的性能至關(guān)重要。一些開發(fā)人員總是在事后才想起添加索引——我一直認(rèn)為,這源于一種錯(cuò)誤的開發(fā)模式。如果知道數(shù)據(jù)的使用,從一開始就應(yīng)該在需要處添加索引。開發(fā)人員對(duì)于數(shù)據(jù)庫的工作往往停留在應(yīng)用的層面,比如編寫SQL語句、存儲(chǔ)過程之類,他們甚至可能不知道索引的存在,或者認(rèn)為事后讓相關(guān)DBA加上即可。而DBA往往不了解業(yè)務(wù)的數(shù)據(jù)流,添加索引需要通過監(jiān)控大量的SQL語句,從中找到問題。這個(gè)步驟需要的時(shí)間肯定是大于初始添加索引所需要的時(shí)間,并且可能會(huì)遺漏一部分索引。當(dāng)然索引不是越多越好,我曾經(jīng)遇到這樣一個(gè)問題:某臺(tái)MysQL服務(wù)器iostat顯示磁盤使用率100%,經(jīng)過分析后發(fā)現(xiàn),是由于開發(fā)人員添加了太多的索引。在刪除一些不必要的索引之后,磁盤使用率馬上下降為20%,因此索引的添加也是有一定技巧的。
媒體關(guān)注與評(píng)論
作者是一位非常有經(jīng)驗(yàn)的DBA,他將自己多年在MySQL存儲(chǔ)引擎上積累的經(jīng)驗(yàn)融匯成了這本書,并形成了自己的研究成果,實(shí)在令人敬佩。本書內(nèi)容深入且全面,像這樣的書已經(jīng)越來越少,像這樣有研究精神的人也越來越少。我不僅要向InnoDB的初學(xué)者推薦本書,而且還要向富有經(jīng)驗(yàn)的DBA推薦本書,或許他們已經(jīng)掌握了一些InnoDB的應(yīng)用和調(diào)優(yōu)知識(shí),但這本書能幫助他們?cè)谶@個(gè)方向上再前進(jìn)“一小步”?! 欆簿糜尉W(wǎng)COO SQL Server企業(yè)版的一顆CPU License要人民幣貳拾多萬,Oracle的Licerlse更是按照CPU內(nèi)核數(shù)計(jì)算,這樣的價(jià)格不是一般的成長(zhǎng)型企業(yè)能承受得起的,對(duì)于有海量數(shù)據(jù)存儲(chǔ)需求的大企業(yè),License費(fèi)用就更夸張了??梢?,MySQL在數(shù)據(jù)庫市場(chǎng)上的重要性是勿容置疑的?! ∪欢?,MySQL在教育上的投入遠(yuǎn)沒有Microsoft和Oracle那樣多,可以參考的書不多,其中大多數(shù)書又和幫助文檔沒有太多區(qū)別。畢竟,在這個(gè)心浮氣躁的年代,愿意拋開雜念一心熱衷于鉆研IT技術(shù)的人越來越少了,堅(jiān)持下來的,愿意花時(shí)間寫書來分享自己經(jīng)驗(yàn)的,就更少了。David就是這少數(shù)人當(dāng)中的一個(gè),認(rèn)識(shí)他有十多年了,他給我的印象就是快樂的IT人,每次有新的發(fā)現(xiàn)或研究成果,都會(huì)很興奮地與我分享。這次,他把多年的InnoDB經(jīng)驗(yàn)?zāi)贸鰜砼c大家分享,完全是原創(chuàng)哦,希望MySQL的同行多多支持! ——Tom SavUver玫琳凱(中國)化妝品有限公司數(shù)據(jù)庫架構(gòu)師 InnoDB作為MySQL非常重要的存儲(chǔ)引擎之一,在MySQL的企業(yè)級(jí)應(yīng)用中占據(jù)著非常重要的地位。目前市場(chǎng)上介紹MySQL的書不算多,專門講解InnoDB引擎的書更是鳳毛麟角。本書不僅剖析了InnoDB引擎的實(shí)現(xiàn)原理,而且結(jié)合源代碼揭示了InnoDB的工作機(jī)制,是作者多年應(yīng)用經(jīng)驗(yàn)的結(jié)晶。作者本人不僅在MySQL企業(yè)級(jí)應(yīng)用上具有豐富的實(shí)戰(zhàn)經(jīng)驗(yàn),在數(shù)據(jù)庫開發(fā)方面也有很高的造詣,開發(fā)了性能不錯(cuò)的InnoDB引擎二級(jí)緩存項(xiàng)目,為開源社區(qū)貢獻(xiàn)了自己的一份力量。 對(duì)于廣大DBA和開發(fā)者而言,要知其然,更要知其所以然,只有明白了實(shí)現(xiàn)原理和工作機(jī)制才能更好地解決工作中遇到的問題。不管你是學(xué)習(xí)MySQL的新手還是能熟練使用MySQL的專家級(jí)人物,不管你是一般的應(yīng)用開發(fā)人員還是專業(yè)的MySQL DBA,如果你想從容面對(duì)在工作中遇到的InnoDB問題,想以更優(yōu)化的方式使用InnoDB引擎,想做出滿足自己業(yè)務(wù)需要的InnoDB引擎特性,你一定能從本書中找到答案?! 獥詈3吕司W(wǎng)(中國)技術(shù)有限公司高級(jí)DBA
編輯推薦
InnoDB是MySQL數(shù)據(jù)庫中最常用、最核心和最重要的存儲(chǔ)引擎之一,它是為處理海量數(shù)據(jù)時(shí)仍能獲得最佳性能而設(shè)計(jì)的。它的CPU效率可能是任何其他基于磁盤的關(guān)系數(shù)據(jù)庫引擎所不能匹敵的。MySQL與其他數(shù)據(jù)庫的一個(gè)顯著不同在于它特有的插件式存儲(chǔ)引擎架構(gòu)。InnoDB作為MySQL的首選存儲(chǔ)引擎已經(jīng)被Facebook、Yahoo等很多大公司所采用并工作在其核心數(shù)據(jù)庫應(yīng)用中,已經(jīng)被證明是一種高性能、高并發(fā)性和高可用性的存儲(chǔ)引擎。幾乎所有涉及大數(shù)據(jù)量的MySQL數(shù)據(jù)庫應(yīng)用架構(gòu)都會(huì)采用,也必須采用InnoDB存儲(chǔ)引擎。因此,掌握InnoDB存儲(chǔ)引擎就等于掌握了MySQL數(shù)據(jù)庫的核心。無論是DBA。還是一般的應(yīng)用開發(fā)人員,要設(shè)計(jì)和管理高性能、高可用的數(shù)據(jù)庫系統(tǒng),都需要理解和掌握數(shù)據(jù)庫的體系結(jié)構(gòu)和內(nèi)部實(shí)現(xiàn)。對(duì)于所有MySQL用戶而言,如果要真正用好MySQL,要讓它最佳地工作,就必須先徹底地掌握InnoDBB。《MySQL技術(shù)內(nèi)幕:InnoDB存儲(chǔ)引擎》從源代碼的角度,對(duì)InnoDB的實(shí)現(xiàn)原理和工作機(jī)制進(jìn)行了全面而深入的探討,深度、廣度和實(shí)踐性完美結(jié)合,相信能給廣大MySQL用戶帶來幫助。
圖書封面
圖書標(biāo)簽Tags
無
評(píng)論、評(píng)分、閱讀與下載