已閱讀5頁,還剩33頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
吉林大學(xué)珠海學(xué)院畢 業(yè) 論 文sql server數(shù)據(jù)庫性能優(yōu)化研究researching of the sql server database performance optimization系別:計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)名稱:計(jì)算機(jī)科學(xué)與技術(shù)學(xué)生姓名:李信龍學(xué)號(hào):04050722指導(dǎo)教師姓名、職稱:崔樹林、講師完成日期 2009年 5月 13 日iii吉林大學(xué)珠海學(xué)院本科畢業(yè)論文開題報(bào)告選 題sql server數(shù)據(jù)庫性能優(yōu)化研究院 系計(jì)算機(jī)系專 業(yè)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)生姓名李信龍指導(dǎo)教師崔樹林本選題的背景、意義及國內(nèi)外發(fā)展?fàn)顩r: 數(shù)據(jù)庫技術(shù)是計(jì)算機(jī)科學(xué)技術(shù)發(fā)展最快、應(yīng)用最廣泛的領(lǐng)域之一,在信息管理自動(dòng)化程度日益提高的今天,數(shù)據(jù)庫技術(shù)已經(jīng)成為現(xiàn)代計(jì)算機(jī)信息系統(tǒng)和應(yīng)用系統(tǒng)的基礎(chǔ)和核心。數(shù)據(jù)庫技術(shù)最初產(chǎn)生于20世紀(jì)60年代中期,從最初的層次模型、網(wǎng)狀模型,到目前的關(guān)系模型、面向?qū)ο竽P?,己?jīng)過40年左右的發(fā)展。數(shù)據(jù)庫建設(shè)是現(xiàn)代信息產(chǎn)業(yè)的基本建設(shè)工程,一個(gè)國家擁有多少自己的數(shù)據(jù)庫,能用數(shù)據(jù)庫提供多少服務(wù),是各國經(jīng)濟(jì)實(shí)力、文明程度和科技水平的重要標(biāo)志。我國引進(jìn)數(shù)據(jù)庫技術(shù)始于20世紀(jì)70年代末,自進(jìn)入20世紀(jì)80年代以來,我國數(shù)據(jù)庫建設(shè)有了較大發(fā)展,從微型計(jì)算機(jī)上運(yùn)行的數(shù)據(jù)庫到當(dāng)前大型數(shù)據(jù)庫系統(tǒng)的引入和應(yīng)用。但從對(duì)數(shù)據(jù)庫系統(tǒng)的應(yīng)用效果和對(duì)數(shù)據(jù)庫技術(shù)指標(biāo)掌握上來比較,與發(fā)達(dá)國家之間仍然存在較大的差距。數(shù)據(jù)庫技術(shù)應(yīng)用從傳統(tǒng)的商務(wù)數(shù)據(jù)處理不斷擴(kuò)大到許多新的領(lǐng)域,如計(jì)算機(jī)圖像處理、多媒體應(yīng)用、商業(yè)管理、gis等,要使這些領(lǐng)域中應(yīng)用的信息系統(tǒng)高效、正常、安全地運(yùn)行,其中最為顯著的就是數(shù)據(jù)庫的性能問題。在網(wǎng)絡(luò)應(yīng)用和電子商務(wù)高速發(fā)展的時(shí)代,信息系統(tǒng)在國民經(jīng)濟(jì)建設(shè)中擔(dān)負(fù)著越來越重要的任務(wù),如何使有限的計(jì)算機(jī)系統(tǒng)資源充分發(fā)揮應(yīng)有的作用?如何保證用戶的響應(yīng)速度和服務(wù)質(zhì)量?如何保證未來的某個(gè)時(shí)間保持現(xiàn)有的運(yùn)行性能?這些問題都屬于數(shù)據(jù)庫性能優(yōu)化的范疇。隨著數(shù)據(jù)庫規(guī)模的不斷擴(kuò)大,數(shù)據(jù)庫系統(tǒng)的性能問題也越來越突出,數(shù)據(jù)庫應(yīng)用系統(tǒng)能否正常、高效地運(yùn)行倍受關(guān)注,數(shù)據(jù)庫優(yōu)化技術(shù)方法的探索具有非常重要的意義。研究內(nèi)容: 由于數(shù)據(jù)庫調(diào)優(yōu)涉及很多方面的知識(shí),本論文將從幾個(gè)方面研究:數(shù)據(jù)庫邏輯結(jié)構(gòu)和物理結(jié)構(gòu)的優(yōu)化、sql語句優(yōu)化、合適索引的創(chuàng)建、sql server分區(qū)技術(shù)等等。 1、數(shù)據(jù)庫邏輯結(jié)構(gòu)和物理結(jié)構(gòu)的優(yōu)化 設(shè)計(jì)應(yīng)用的開始步驟之一就是表(或關(guān)系)的設(shè)計(jì),數(shù)據(jù)將要存儲(chǔ)在表中。一旦應(yīng)用系統(tǒng)運(yùn)行起來,修改表的設(shè)計(jì)有可能需要修改許多運(yùn)用程序,這是我們不愿意看到的,而且修改后還要進(jìn)行測試。因此,在最初就設(shè)計(jì)好數(shù)據(jù)庫的表是很重要的。規(guī)范化是設(shè)計(jì)數(shù)據(jù)庫表的理論指導(dǎo)。 2、索引調(diào)優(yōu) 在良好的數(shù)據(jù)庫設(shè)計(jì)基礎(chǔ)上,能有效地使用索引是數(shù)據(jù)庫取得高性能的基礎(chǔ),數(shù)據(jù)庫采用基于代價(jià)的優(yōu)化模型,它對(duì)每一個(gè)提交的有關(guān)表的查詢,決定是否使用索引或用哪一個(gè)索引。因?yàn)椴樵儓?zhí)行的大部分開銷是磁盤i/o,使用索引提高性能的一個(gè)主要目標(biāo)是避免全表掃描,因?yàn)槿頀呙栊枰獜拇疟P上讀表的每一個(gè)數(shù)據(jù)頁,如果有索引指向數(shù)據(jù)值,則查詢只需讀幾次磁盤就可以了。所以如果建立了合理的索引,優(yōu)化器就能利用索引加速數(shù)據(jù)的查詢過程。但是,索引并不總是提高系統(tǒng)的性能,在增、刪、改操作中索引的存在會(huì)增加一定的工作量,因此,在適當(dāng)?shù)牡胤皆黾舆m當(dāng)?shù)乃饕牟缓侠淼牡胤絼h除次優(yōu)的索引,將有助于優(yōu)化那些性能較差的數(shù)據(jù)庫應(yīng)用。實(shí)踐表明,合理的索引設(shè)計(jì)是建立在對(duì)各種查詢的分析和預(yù)測上的,只有正確地使索引與程序結(jié)合起來,才能產(chǎn)生最佳的優(yōu)化方案。3、sql優(yōu)化在使用sql時(shí)往往會(huì)陷入一個(gè)誤區(qū),即太關(guān)注于所得的結(jié)果是否正確,而忽略了不同的實(shí)現(xiàn)方法之間可能存在的性能差異,這種性能差異在大型的或是復(fù)雜的數(shù)據(jù)庫環(huán)境中(如聯(lián)機(jī)事務(wù)處理oltp或決策支持系統(tǒng)dss)中表現(xiàn)得尤為明顯。本人在工作實(shí)踐中發(fā)現(xiàn),不良的sql往往來自于不恰當(dāng)?shù)乃饕O(shè)計(jì)、不充份的連接條件和不可優(yōu)化的where子句。在對(duì)它們進(jìn)行適當(dāng)?shù)膬?yōu)化后,其運(yùn)行速度有了明顯地提高研究方法、手段及步驟:一、閱讀相關(guān)數(shù)據(jù)庫理論書籍,用這些理論來證明調(diào)優(yōu)方法的合理性二、上網(wǎng)查找具體數(shù)據(jù)庫性能調(diào)優(yōu)的技術(shù)實(shí)現(xiàn)。 三、設(shè)計(jì)一個(gè)具體實(shí)例進(jìn)行比較調(diào)優(yōu)前和調(diào)優(yōu)后的差別 四、與有這方面實(shí)踐經(jīng)驗(yàn)的同事交流和討論參考文獻(xiàn):1 dennis shasha 著 孟小峰譯數(shù)據(jù)庫性能調(diào)優(yōu):原理與技術(shù)m機(jī)械工業(yè)出版社, 2004-05-012 itzik ben-gan, dejan sarka, roger wolter著 趙立東 譯 microsoft sql server 2005 技術(shù)內(nèi)幕:t-sql程序設(shè)計(jì)m 電子工業(yè)出版社, 2007-08-013 kalen delaney 著 聶偉, 方磊, 揭磊駿譯 microsoft sql server 2005技術(shù)內(nèi)幕:存儲(chǔ)引擎m 電子工業(yè)出版社, 2007-09-014 jim gray andreas reuter 著 孟小峰譯事務(wù)處理(概念與技術(shù))m 機(jī)械工業(yè)出版社 2004-1-15 王珊, 薩師煊 著數(shù)據(jù)庫系統(tǒng)概論第四版m 高等教育出版社2006-5-16 silberchatz ,abraham著 楊冬青, 唐世渭 譯數(shù)據(jù)庫系統(tǒng)概念(原書第4版)m 機(jī)械工業(yè)出版社 2003-3-17 嚴(yán)蔚敏, 吳偉民著數(shù)據(jù)結(jié)構(gòu)(c語言版)m 清華大學(xué)出版社 2007-03-01摘 要數(shù)據(jù)庫系統(tǒng)的性能最終決定數(shù)據(jù)庫的可用性和生命力。大多數(shù)數(shù)據(jù)庫系統(tǒng)在運(yùn)行一段時(shí)間后都會(huì)存在一定的性能問題,主要涉及數(shù)據(jù)庫硬件、數(shù)據(jù)庫服務(wù)器、數(shù)據(jù)庫內(nèi)存、應(yīng)用程序、操作系統(tǒng)、數(shù)據(jù)庫參數(shù)等方面。因此,基于數(shù)據(jù)庫系統(tǒng)的性能調(diào)整與優(yōu)化對(duì)于整個(gè)系統(tǒng)的正常運(yùn)行起著至關(guān)重要的作用。數(shù)據(jù)庫性能調(diào)整與優(yōu)化涉及到多個(gè)層面,通過統(tǒng)一規(guī)劃、系統(tǒng)分析做出相應(yīng)的調(diào)整,可以提高數(shù)據(jù)庫的穩(wěn)定性和可用性,保障系統(tǒng)高效地運(yùn)行,解決系統(tǒng)瓶頸,節(jié)約系統(tǒng)開銷,具有良好的應(yīng)用價(jià)值。同時(shí)也對(duì)理論研究提供了一定的方法指導(dǎo)。基于此,論文根據(jù)本人在實(shí)際工作中遇到的問題和平時(shí)對(duì)數(shù)據(jù)庫的使用經(jīng)驗(yàn),將數(shù)據(jù)庫設(shè)計(jì)、合理的索引添加以及sql語句優(yōu)化等方面的性能調(diào)整與優(yōu)化問題作為主要研究內(nèi)容,對(duì)其進(jìn)行了深入地分析和討論,給出了一般情況下sql server數(shù)據(jù)庫應(yīng)用系統(tǒng)的性能調(diào)整策略及優(yōu)化方法。首先,介紹了數(shù)據(jù)庫性能調(diào)整的相關(guān)研究背景、論文選題意義以及數(shù)據(jù)庫性能調(diào)整與優(yōu)化架構(gòu),涉及性能調(diào)整與優(yōu)化的概念、性能評(píng)價(jià)指標(biāo)以及數(shù)據(jù)庫優(yōu)化的主要方面。其次,對(duì)常用的幾種優(yōu)化技術(shù)進(jìn)行了詳細(xì)地介紹與說明??偨Y(jié)歸納了數(shù)據(jù)庫邏輯結(jié)構(gòu)和物理結(jié)構(gòu)的優(yōu)化、sql語句優(yōu)化的實(shí)質(zhì)與目的、方法與技巧,索引創(chuàng)建的相關(guān)規(guī)則,sql server分區(qū)技術(shù)等。最后提出一個(gè)針對(duì)sql server數(shù)據(jù)庫的系統(tǒng)性能總體調(diào)整策略。最后,對(duì)sql server數(shù)據(jù)庫性能調(diào)整與優(yōu)化問題進(jìn)行了總結(jié)。關(guān)鍵詞:數(shù)據(jù)庫;sql server;性能優(yōu)化abstractthe performance of database systems eventually determines their availability and survivability. most of them will bring about some performance problems more or less after running for a period of time, which mainly involve database hardware, database server, database memory, applications, operating systems and database parameters, etc. therefore, performance tuning and optimization of database systems, which concern multiple aspects, are very vital to the normal running of the whole system. through a unified plan and systematical analysis to make appropriate adjustment, the stability and availability of database will be improved, high running efficiency will be guaranteed, system bottleneck will be solved, system overhead will be reduced, considerable applicability and in the meanwhile will be obtained, and some guidelines for theoretical research will be provided. based on the above-mentioned idea, by problems meeting in working experience of using sql database, the paper principally pays attention to the research on the performance tuning and optimization of sql statements, and makes a deep analysis and discussion. it suggests in general some performance tuning strategies and optimization approaches of sql server application systems to drive the development of sql server performance management and optimization technology.firstly, the paper introduces the corresponding research background of performance tuning of database, significance of selected topic and framework of performance tuning and optimization of database including their concepts, performance evaluation index and primary aspects of optimization.secondly, several common optimization techniques are introduced and explained in detail. this paper summarizes optimization of database logical structure and physical structures, methods and techniques of sql optimization, relevant rules of index creation, and intelligent use of sql server partitioning techniques. the fore-and-aft performance indexes of various optimization techniques are analyzed and compared. an overall tuning strategy of system performance for sql server databases is put forward in the end.finally, this paper summarizes and prospects the problems of performance tuningand optimization of sql server databases.keywords:database;sql server;performance;optimization目錄1 緒 論11.1課題研究背景11.2研究意義與目的11.3研究的內(nèi)容與組織結(jié)構(gòu)22 數(shù)據(jù)庫性能優(yōu)化架構(gòu)32.1性能調(diào)整與優(yōu)化概述32.2數(shù)據(jù)庫優(yōu)化的目標(biāo)32.2.1提高系統(tǒng)的吞吐量32.2.2縮短系統(tǒng)的響應(yīng)時(shí)間42.3性能調(diào)整的步驟42.3.1優(yōu)化業(yè)務(wù)邏輯52.3.2調(diào)整數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)52.3.3優(yōu)化數(shù)據(jù)庫的邏輯結(jié)構(gòu)52.3.4優(yōu)化數(shù)據(jù)庫的操作53 性能優(yōu)化技術(shù)介紹63.1數(shù)據(jù)庫結(jié)構(gòu)優(yōu)化63.1.1數(shù)據(jù)庫邏輯結(jié)構(gòu)的優(yōu)化63.1.2數(shù)據(jù)庫物理存儲(chǔ)結(jié)構(gòu)的優(yōu)化63.1.3使用分區(qū)73.2 sql查詢語句的優(yōu)化93.2.1合理使用索引93.2.2優(yōu)化sql語句的一些具體策略114 商品訂單管理系統(tǒng)數(shù)據(jù)庫設(shè)計(jì)165 優(yōu)化實(shí)例185.1數(shù)據(jù)庫物理結(jié)構(gòu)的優(yōu)化185.2添加必要的索引185.2.1確定預(yù)索引字段205.2.2創(chuàng)建適當(dāng)?shù)乃饕?05.2.3實(shí)驗(yàn)結(jié)果分析205.3 sql語句的優(yōu)化216 總 結(jié)24參考文獻(xiàn)25致 謝26301 緒 論1.1課題研究背景數(shù)據(jù)庫技術(shù)是計(jì)算機(jī)科學(xué)技術(shù)發(fā)展最快、應(yīng)用最廣泛的領(lǐng)域之一,在信息管理自動(dòng)化程度日益提高的今天,數(shù)據(jù)庫技術(shù)已經(jīng)成為現(xiàn)代計(jì)算機(jī)信息系統(tǒng)和應(yīng)用系統(tǒng)的基礎(chǔ)和核心。數(shù)據(jù)庫技術(shù)最初產(chǎn)生于20世紀(jì)60年代中期,從最初的層次模型、網(wǎng)狀模型,到目前的關(guān)系模型、面向?qū)ο竽P?,己?jīng)過40年左右的發(fā)展。數(shù)據(jù)庫建設(shè)是現(xiàn)代信息產(chǎn)業(yè)的基本建設(shè)工程,一個(gè)國家擁有多少自己的數(shù)據(jù)庫,能用數(shù)據(jù)庫提供多少服務(wù),是各國經(jīng)濟(jì)實(shí)力、文明程度和科技水平的重要標(biāo)志。我國引進(jìn)數(shù)據(jù)庫技術(shù)始于20世紀(jì)70年代末,自進(jìn)入20世紀(jì)80年代以來,我國數(shù)據(jù)庫建設(shè)有了較大發(fā)展,從微型計(jì)算機(jī)上運(yùn)行的數(shù)據(jù)庫到當(dāng)前大型數(shù)據(jù)庫系統(tǒng)的引入和應(yīng)用。但從對(duì)數(shù)據(jù)庫系統(tǒng)的應(yīng)用效果和對(duì)數(shù)據(jù)庫技術(shù)指標(biāo)掌握上來比較,與發(fā)達(dá)國家之間仍然存在較大的差距。數(shù)據(jù)庫技術(shù)應(yīng)用從傳統(tǒng)的商務(wù)數(shù)據(jù)處理不斷擴(kuò)大到許多新的領(lǐng)域,如計(jì)算機(jī)圖像處理、多媒體應(yīng)用、商業(yè)管理、gis等,要使這些領(lǐng)域中應(yīng)用的信息系統(tǒng)高效、正常、安全地運(yùn)行,其中最為顯著的就是數(shù)據(jù)庫的性能問題。在網(wǎng)絡(luò)應(yīng)用和電子商務(wù)高速發(fā)展的時(shí)代,信息系統(tǒng)在國民經(jīng)濟(jì)建設(shè)中擔(dān)負(fù)著越來越重要的任務(wù),如何使有限的計(jì)算機(jī)系統(tǒng)資源充分發(fā)揮應(yīng)有的作用?如何保證用戶的響應(yīng)速度和服務(wù)質(zhì)量?如何保證未來的某個(gè)時(shí)間保持現(xiàn)有的運(yùn)行性能?這些問題都屬于數(shù)據(jù)庫性能優(yōu)化的范疇。隨著數(shù)據(jù)庫規(guī)模的不斷擴(kuò)大,數(shù)據(jù)庫系統(tǒng)的性能問題也越來越突出,數(shù)據(jù)庫應(yīng)用系統(tǒng)能否正常、高效地運(yùn)行倍受關(guān)注,數(shù)據(jù)庫優(yōu)化技術(shù)方法的探索具有非常重要的意義。1.2研究意義與目的sql server在數(shù)據(jù)庫領(lǐng)域一直占據(jù)著不小的份額。sql server現(xiàn)在可用于大型機(jī)、客戶/服務(wù)器以及pc平臺(tái),適合于各種操作系統(tǒng),包括microsotf windows和windows nt、0s/390(mvs)、各種unix操作系統(tǒng)、linux等。同時(shí),sql server數(shù)據(jù)庫在國內(nèi)外也獲得了諸多成功應(yīng)用。企業(yè)資源規(guī)劃應(yīng)用程序包、數(shù)據(jù)倉庫以及許多公司的客戶應(yīng)用系統(tǒng)都要依賴sql server。sql server數(shù)據(jù)庫產(chǎn)品在整個(gè)數(shù)據(jù)庫產(chǎn)品的應(yīng)用中占據(jù)了不小的比例,并且有不斷上升的趨勢。sql server數(shù)據(jù)庫系統(tǒng)博大精深,其系統(tǒng)管理工作非常復(fù)雜。對(duì)于sql server數(shù)據(jù)庫來說,操作系統(tǒng)的性能、服務(wù)器硬件的性能、數(shù)據(jù)庫的設(shè)計(jì)、表空間的規(guī)劃、聚簇的使用、并行控制等無一不影響其運(yùn)行的整體性能。sql server數(shù)據(jù)庫服務(wù)器是高度可優(yōu)化的軟件產(chǎn)品,對(duì)sql server數(shù)據(jù)庫進(jìn)行性能調(diào)整與優(yōu)化具有非常重要的意義。目前國內(nèi)外關(guān)于sql server數(shù)據(jù)庫系統(tǒng)的應(yīng)用實(shí)例優(yōu)化并不多,而且講解比較理論化。因此,本文根據(jù)自己平時(shí)的實(shí)際工作所遇到的一些問題和自己對(duì)sql server數(shù)據(jù)庫的使用經(jīng)驗(yàn),主要從數(shù)據(jù)庫設(shè)計(jì)優(yōu)化、索引添加、查詢優(yōu)化這三個(gè)方面進(jìn)行實(shí)驗(yàn)測試,通過對(duì)各種優(yōu)化技術(shù)的介紹、分析和研究,對(duì)使用不同優(yōu)化技術(shù)前后的性能評(píng)價(jià)指標(biāo)進(jìn)行比較,體現(xiàn)各種優(yōu)化技術(shù)對(duì)數(shù)據(jù)庫運(yùn)行效率的影響程度,提出sql server數(shù)據(jù)庫應(yīng)用系統(tǒng)性能優(yōu)化的合理方法。使得能有效的使用sql server數(shù)據(jù)庫產(chǎn)品,將它的性能調(diào)整到更適合自己的需要。1.3研究的內(nèi)容與組織結(jié)構(gòu)數(shù)據(jù)庫性能問題是當(dāng)今諸如管理信息系統(tǒng)等眾多數(shù)據(jù)庫應(yīng)用系統(tǒng)所面臨的共同問題,為了解決系統(tǒng)運(yùn)行過程中遇到的種種瓶頸,對(duì)數(shù)據(jù)庫性能調(diào)整理論和應(yīng)用的研究是迫切需要的。本文對(duì)目前sql server數(shù)據(jù)庫性能調(diào)整的一些優(yōu)化技術(shù)的應(yīng)用實(shí)踐進(jìn)行了討論,具有一定的理論研究價(jià)值和現(xiàn)實(shí)意義。各章節(jié)安排如下:第一章綜述了數(shù)據(jù)庫性能調(diào)整的研究現(xiàn)狀和發(fā)展概況,闡述了論文研究的意義與目的。第二章介紹了數(shù)據(jù)庫性能調(diào)整與優(yōu)化的主要目標(biāo),分析了系統(tǒng)性能評(píng)價(jià)指標(biāo)和數(shù)據(jù)庫性能優(yōu)化的主要方面。第三章對(duì)性能優(yōu)化技術(shù)介紹。第四章詳細(xì)介紹了sql server數(shù)據(jù)庫性能調(diào)整與優(yōu)化的相關(guān)技術(shù),包括數(shù)據(jù)庫邏輯結(jié)構(gòu)和物理結(jié)構(gòu)的優(yōu)化、sql語句優(yōu)化、合適索引的創(chuàng)建、sql server分區(qū)技術(shù)等等。第五章開發(fā)了一個(gè)商品訂單管理系統(tǒng)作為測試用例,對(duì)如何優(yōu)化數(shù)據(jù)庫的性能進(jìn)行具體的測試和分析。第六章總結(jié)全文,肯定了數(shù)據(jù)庫性能調(diào)整的應(yīng)用價(jià)值。2 數(shù)據(jù)庫性能優(yōu)化架構(gòu)2.1性能調(diào)整與優(yōu)化概述性能調(diào)整(performance tuning)是一項(xiàng)活動(dòng),這項(xiàng)活動(dòng)通過優(yōu)化應(yīng)用程序、修改系統(tǒng)參數(shù)、改變系統(tǒng)配置(硬件調(diào)整)來改變系統(tǒng)性能。性能調(diào)整包括對(duì)硬件配置操作系統(tǒng)(os)與關(guān)系型數(shù)據(jù)庫管理系統(tǒng)(rdbms)配置,以及對(duì)訪問這些組件的應(yīng)用的詳細(xì)分析與優(yōu)化。系統(tǒng)性能的判定標(biāo)準(zhǔn)依賴于性能衡量的研究,通常認(rèn)為性能的指標(biāo)可以通過處理一個(gè)事務(wù)所需的i/o量、cpu時(shí)間量、以及響應(yīng)時(shí)間來衡量。性能會(huì)隨特定環(huán)境的不同而變化,并受應(yīng)用程序、體系結(jié)構(gòu)和資源、服務(wù)器以及并發(fā)活動(dòng)的具體情況影響。性能調(diào)整的一個(gè)主要目標(biāo)是消除瓶頸。瓶頸(bottle neck)是性能限制的重要因素,它可以是硬件或軟件,如果不是在正確配置和調(diào)整的系統(tǒng)中,就會(huì)嚴(yán)重地影響系統(tǒng)性能。減少瓶頸可以最大地發(fā)揮一個(gè)系統(tǒng)的性能。為有效地對(duì)系統(tǒng)進(jìn)行調(diào)整,必須遵循一套特定的步驟或方法,去調(diào)整和優(yōu)化系統(tǒng)中的所有組件,包括應(yīng)用、硬件與sql server。首先,討論將涉及系統(tǒng)調(diào)整的不同組件。在本章后面部分,著重介紹性能調(diào)整的方法論。2.2數(shù)據(jù)庫優(yōu)化的目標(biāo)有不同的方式確定性能調(diào)整工作的目標(biāo)。數(shù)據(jù)庫應(yīng)用系統(tǒng)可以用各種定量的方法分析,其中最重要指標(biāo)如下:2.2.1提高系統(tǒng)的吞吐量吞吐量是指給定時(shí)間內(nèi)服務(wù)器能夠處理的查詢總數(shù),即每個(gè)單元時(shí)間完成的工作,以每秒鐘的事務(wù)量(tps)表示;該值越高越好。提高系統(tǒng)的吞吐量也有兩種方法:l 在同樣的資源環(huán)境下做更多的工作(通過減少服務(wù)時(shí)間);l 通過減少總的響應(yīng)時(shí)間使工作做得更快。要做到這一點(diǎn),可以將用戶等待的資源加倍,如系統(tǒng)受到cpu限制,則可以增加cpu的數(shù)量。在任何一個(gè)系統(tǒng)中,吞吐量和反應(yīng)時(shí)間作為調(diào)整目標(biāo)通常是互相對(duì)立的。如果反應(yīng)時(shí)間長(壞),吞吐量或許高(好)。如果吞吐量低(壞),反應(yīng)時(shí)間或許短(好)。多數(shù)的并發(fā)用戶在一定時(shí)間內(nèi)使用一個(gè)系統(tǒng),每個(gè)用戶很有可能比平時(shí)要經(jīng)歷更長的延遲,但是通過系統(tǒng)的事務(wù)數(shù)量將會(huì)更大。相反,假如減少在某一個(gè)時(shí)間窗口中訪問系統(tǒng)的并發(fā)用戶數(shù)量,以在該時(shí)間內(nèi)完成的全部事務(wù)量減少為代價(jià),每個(gè)用戶將會(huì)享受到更快的反應(yīng)時(shí)間?,F(xiàn)在考慮一個(gè)為客戶預(yù)定體育比賽門票的公司。如果該公司的營業(yè)時(shí)間為每天8小時(shí),并且在銷售市場體育比賽門票的第一天必須賣出25000張門票,那么該公司的門票預(yù)定系統(tǒng)的吞吐量必須等于或大于每小時(shí)3125筆事務(wù)。吞吐量=(25000筆事務(wù)/8小時(shí))=3125筆事務(wù)/小時(shí),或52.1筆事務(wù)/分鐘。當(dāng)然,以8小時(shí)的時(shí)間間隔來計(jì)算系統(tǒng)需要達(dá)到的吞吐量是不現(xiàn)實(shí)的,因?yàn)椴⒉皇撬行枨蠖际莿蛩俚竭_(dá)系統(tǒng)。在設(shè)計(jì)系統(tǒng)軟硬件規(guī)模和規(guī)劃系統(tǒng)能力時(shí),我們是根據(jù)系統(tǒng)最忙碌的時(shí)間段來計(jì)算系統(tǒng)所要達(dá)到的吞吐量的。這是設(shè)計(jì)數(shù)據(jù)庫系統(tǒng)的一條著名規(guī)律:為最糟糕的情況設(shè)計(jì)系統(tǒng)的軟硬件規(guī)模。2.2.2縮短系統(tǒng)的響應(yīng)時(shí)間系統(tǒng)響應(yīng)時(shí)間是指從用戶按下最后一個(gè)提交按鈕到所有數(shù)據(jù)都顯示在顯示設(shè)備上所花費(fèi)的時(shí)間。以毫秒或秒表示,該值越低越好。系統(tǒng)響應(yīng)時(shí)間的實(shí)質(zhì)就是終端用戶為等待后臺(tái)事務(wù)處理所花費(fèi)時(shí)間。響應(yīng)時(shí)間通常也稱為用戶收到查詢正被處理的直觀確認(rèn)時(shí)刻所感知的時(shí)間長度。數(shù)據(jù)庫用戶響應(yīng)時(shí)間又可以分為系統(tǒng)服務(wù)時(shí)間和用戶等待時(shí)間兩項(xiàng),即:數(shù)據(jù)庫用戶響應(yīng)時(shí)間=系統(tǒng)服務(wù)時(shí)間+用戶等待時(shí)間。因此,獲得滿意的用戶響應(yīng)時(shí)間有兩個(gè)途徑:l 減少系統(tǒng)服務(wù)時(shí)間,即提高數(shù)據(jù)庫的吞吐量。l 減少用戶等待時(shí)間,即減少用戶訪問同一數(shù)據(jù)庫資源的沖突率。盡管某些數(shù)據(jù)庫系統(tǒng)需要實(shí)現(xiàn)系統(tǒng)可能達(dá)到的最高吞吐量,但另一些系統(tǒng)可能有嚴(yán)格的系統(tǒng)響應(yīng)時(shí)間要求。在這種環(huán)境中,漫長的系統(tǒng)響應(yīng)時(shí)間常常意味著客戶只能在線等待,這將阻礙其他用戶使用系統(tǒng)。這種情況往往意味著失掉商機(jī),所以縮短系統(tǒng)響應(yīng)時(shí)間是非常重要的。對(duì)于那些對(duì)響應(yīng)時(shí)間有嚴(yán)格要求的系統(tǒng),必須采取不同的方法對(duì)系統(tǒng)進(jìn)行調(diào)整。為了縮短系統(tǒng)響應(yīng)時(shí)間,可以使系統(tǒng)以遠(yuǎn)低于其實(shí)際吞吐能力的吞吐量運(yùn)行或是將批理作業(yè)放在非營業(yè)時(shí)間內(nèi)處理。2.3性能調(diào)整的步驟不少人認(rèn)為數(shù)據(jù)庫應(yīng)用系統(tǒng)的性能調(diào)整是在系統(tǒng)運(yùn)行出現(xiàn)問題時(shí)才進(jìn)行的,其實(shí),這種看法是片面的。性能調(diào)整和優(yōu)化工作是在進(jìn)行系統(tǒng)計(jì)劃和設(shè)計(jì)階段就已經(jīng)開始了,并且一直貫穿系統(tǒng)的運(yùn)行周期。在計(jì)劃階段就仔細(xì)地考慮性能調(diào)整工作,這會(huì)大大減輕系統(tǒng)運(yùn)行后的性能調(diào)整工作。在數(shù)據(jù)庫的性能調(diào)整過程中需要應(yīng)用程序設(shè)計(jì)人員、應(yīng)用程序開發(fā)人員、數(shù)據(jù)庫管理員以及系統(tǒng)管理員共同完成。下面以優(yōu)先順序給出性能調(diào)整的步驟:2.3.1優(yōu)化業(yè)務(wù)邏輯為了得到最佳的性能,在數(shù)據(jù)庫設(shè)計(jì)過程中要采用業(yè)務(wù)邏輯。這就關(guān)系到對(duì)整個(gè)系統(tǒng)的高層分析和設(shè)計(jì)。像是否在系統(tǒng)范圍內(nèi)采用線程服務(wù)器這樣的配置問題就是這一階段需要考慮的問題。這樣設(shè)計(jì)者將性能要求同具體的業(yè)務(wù)需求直接聯(lián)系起來。2.3.2調(diào)整數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)在數(shù)據(jù)設(shè)計(jì)階段,設(shè)計(jì)人員必須決定哪些數(shù)據(jù)是應(yīng)用所需的,同時(shí)還要考慮哪些關(guān)系是重要的,以及它們的屬性是什么,還要確定哪些屬性可以作為主鍵(primary key)或外鍵(foreign key)。最后,要構(gòu)造好信息來更好地滿足性能目標(biāo)。這一階段需要對(duì)數(shù)據(jù)進(jìn)行仔細(xì)分析,避免數(shù)據(jù)冗余,同時(shí)要考慮合理分布數(shù)據(jù),以防止數(shù)據(jù)存取的擁擠,如是否使用數(shù)據(jù)庫的分區(qū)功能,以及對(duì)于經(jīng)常訪問的數(shù)據(jù)庫表是否需要建立局部還是全局索引等。2.3.3優(yōu)化數(shù)據(jù)庫的邏輯結(jié)構(gòu)這一階段就是通過增加、減少或調(diào)整邏輯結(jié)構(gòu),如考慮在主鍵和外鍵上建立索引之外增加其它索引以提高系統(tǒng)性能。2.3.4優(yōu)化數(shù)據(jù)庫的操作這一階段主要是在優(yōu)化數(shù)據(jù)庫服務(wù)器之前,首先確保在應(yīng)用中已充分利用了為了提高性能而設(shè)計(jì)的sql以及其中的一些特殊功能。如在sql server數(shù)據(jù)庫中的數(shù)組的處理、sql優(yōu)化器、行級(jí)鎖管理以及sql server查詢分析器等。應(yīng)用程序的執(zhí)行最終將歸結(jié)為數(shù)據(jù)庫中的sql語句執(zhí)行,因此sql語句的執(zhí)行效率最終決定了數(shù)據(jù)庫的性能。3 性能優(yōu)化技術(shù)介紹3.1數(shù)據(jù)庫結(jié)構(gòu)優(yōu)化一個(gè)數(shù)據(jù)庫系統(tǒng)的生命周期可以分成:設(shè)計(jì)、開發(fā)和成品三個(gè)階段。在設(shè)計(jì)階段進(jìn)行數(shù)據(jù)庫性能優(yōu)化的成本最低,收益最大。在成品階段進(jìn)行數(shù)據(jù)庫性能優(yōu)化的成本最高,收益最小。要在sql server方案中實(shí)現(xiàn)最優(yōu)的性能,最關(guān)鍵的是要有一很好的數(shù)據(jù)庫設(shè)計(jì)方案。在實(shí)際工作中,許多sql server方案往往是由于數(shù)據(jù)庫設(shè)計(jì)得不好導(dǎo)致性能很差。所以,要實(shí)現(xiàn)良好的數(shù)據(jù)庫設(shè)計(jì)就必須考慮這些問題。3.1.1數(shù)據(jù)庫邏輯結(jié)構(gòu)的優(yōu)化一般來說,邏輯數(shù)據(jù)庫設(shè)計(jì)的不合理容易產(chǎn)生以下問題,數(shù)據(jù)冗余、更新異常、插入異常、刪除異常。所以邏輯數(shù)據(jù)庫設(shè)計(jì)至少應(yīng)滿足規(guī)范化的前3級(jí)標(biāo)準(zhǔn):第1規(guī)范:沒有重復(fù)的元組或多值的列。第2規(guī)范:每個(gè)非關(guān)鍵字段必須依賴于主關(guān)鍵字,不能依賴于1個(gè)組合式主關(guān)鍵字的某些組成部分。第3規(guī)范:每個(gè)非關(guān)鍵字段必須依賴于主關(guān)鍵字,不能依賴于1個(gè)組合式主關(guān)鍵字的某些組成部分,也不能依賴于另1個(gè)非關(guān)鍵字段。遵守這些規(guī)則的設(shè)計(jì)會(huì)產(chǎn)生較少的列和更多的表,因而也就減少了數(shù)據(jù)冗余,也減少了用于存儲(chǔ)數(shù)據(jù)的頁。但表關(guān)系也許需要通過復(fù)雜的合并來處理,這樣會(huì)降低系統(tǒng)的性能。某種程度上的非規(guī)范化可以改善系統(tǒng)的性能,非規(guī)范化過程可以根據(jù)性能方面不同的考慮用多種不同的方法進(jìn)行,所在在進(jìn)行數(shù)據(jù)庫邏輯結(jié)構(gòu)設(shè)計(jì)時(shí)應(yīng)綜合考慮數(shù)據(jù)冗余和基于連接的查詢帶來的性能問題。3.1.2數(shù)據(jù)庫物理存儲(chǔ)結(jié)構(gòu)的優(yōu)化數(shù)據(jù)文件和日志文件的位置和分布對(duì)系統(tǒng)的性能非常重要。數(shù)據(jù)庫設(shè)計(jì)的兩條關(guān)鍵性的指導(dǎo)原則如下:將序列訪問的文件分離到專用的磁盤上,并通過將數(shù)據(jù)文件分散到各個(gè)磁盤上而允許并行i/o。1.與每個(gè)表列相關(guān)的數(shù)據(jù)類型應(yīng)該反映數(shù)據(jù)所需的最小存儲(chǔ)空間,特別是對(duì)于被索引的列更是如此。比如能使用smallint類型就不要用int類型,這樣索引字段可以被更快地讀取,而且可以在1個(gè)數(shù)據(jù)頁上放置更多的數(shù)據(jù)行,因而也就減少了i/o操作。2.l server分區(qū)技術(shù)把一個(gè)頻繁使用的大表分割開,并放在多個(gè)單獨(dú)的智能型磁盤控制器的數(shù)據(jù)庫設(shè)備上,這樣也可以提高性能。因?yàn)橛卸鄠€(gè)磁頭在查找,所以數(shù)據(jù)分離也能提高性能,sql server的分區(qū)技術(shù)將在下面講到。3.sql server段把文本或圖像列的數(shù)據(jù)存放在1個(gè)單獨(dú)的物理設(shè)備上可以提高性能。1個(gè)專用的智能型的控制器能進(jìn)一步提高性能。3.1.3使用分區(qū)超大型數(shù)據(jù)庫的大小常常達(dá)到數(shù)百gb,有時(shí)甚至要用tb來計(jì)算。而單表的數(shù)據(jù)量往往會(huì)達(dá)到上億的記錄,并且記錄數(shù)會(huì)隨著時(shí)間而增長。這不但影響著數(shù)據(jù)庫的運(yùn)行效率,也增大數(shù)據(jù)庫的維護(hù)難度。除了表的數(shù)據(jù)量外,對(duì)表不同的訪問模式也可能會(huì)影響性能和可用性。這些問題都可以通過對(duì)大表進(jìn)行合理分區(qū)得到很大的改善。當(dāng)表和索引變得非常大時(shí),分區(qū)可以將數(shù)據(jù)分為更小、更容易管理的部分來提高系統(tǒng)的運(yùn)行效率。如果系統(tǒng)有多個(gè)cpu或是多個(gè)磁盤子系統(tǒng),可以通過并行操作獲得更好的性能。所以對(duì)大表進(jìn)行分區(qū)是處理海量數(shù)據(jù)的一種十分高效的方法。下面通過一個(gè)具體實(shí)例,介紹如何創(chuàng)建和修改分區(qū)表,以及如何查看分區(qū)表。分區(qū)功能是sql server 2005新增的一個(gè)功能,表分區(qū)分為水平分區(qū)和垂直分區(qū)。水平分區(qū)將表分為多個(gè)表。每個(gè)表包含的列數(shù)相同,但是行更少。例如,可以將一個(gè)包含十億行的表水平分區(qū)成12個(gè)表,每個(gè)小表表示特定年份內(nèi)一個(gè)月的數(shù)據(jù)。任何需要特定月份數(shù)據(jù)的查詢只需引用相應(yīng)月份的表。而垂直分區(qū)則是將原始表分成多個(gè)只包含較少列的表。水平分區(qū)是最常用分區(qū)方式,本文以水平分區(qū)來介紹具體實(shí)現(xiàn)方法。平分區(qū)常用的方法是根據(jù)時(shí)期和使用對(duì)數(shù)據(jù)進(jìn)行水平分區(qū)。例如本文例子,一個(gè)短信發(fā)送記錄表包含最近一年的數(shù)據(jù),但是只定期訪問本季度的數(shù)據(jù)。在這種情況下,可考慮將數(shù)據(jù)分成四個(gè)區(qū),每個(gè)區(qū)只包含一個(gè)季度的數(shù)據(jù)。下面具體介紹一下使用分區(qū)表的方法。1.建文件組立分區(qū)表先要?jiǎng)?chuàng)建文件組,而創(chuàng)建多個(gè)文件組主要是為了獲得好的i/o平衡。一般情況下,文件組數(shù)最好與分區(qū)數(shù)相同,并且這些文件組通常位于不同的磁盤上。每個(gè)文件組可以由一個(gè)或多個(gè)文件構(gòu)成,而每個(gè)分區(qū)必須映射到一個(gè)文件組。一個(gè)文件組可以由多個(gè)分區(qū)使用。為了更好地管理數(shù)據(jù)(例如,為了獲得更精確的備份控制),對(duì)分區(qū)表應(yīng)進(jìn)行設(shè)計(jì),以便只有相關(guān)數(shù)據(jù)或邏輯分組的數(shù)據(jù)位于同一個(gè)文件組中。使用alter database,添加邏輯文件組名:aer databasedeandbadd filegroupfg1dandb為數(shù)據(jù)庫名稱,fg1文件組名。創(chuàng)建文件組后,再使用alter database將文件添加到該文件組中。ater databasedeandbadd file(name=fg1,filename=c:deandatafg1.ndf,size=3072kb,filegrowth=1024kb)to filegroupfg1類似的建立四個(gè)文件和文件組,并把每一個(gè)存儲(chǔ)數(shù)據(jù)的文件放在不同的磁盤驅(qū)動(dòng)器里。2.創(chuàng)建分區(qū)函數(shù)創(chuàng)建分區(qū)表必須先確定分區(qū)的功能機(jī)制,表進(jìn)行分區(qū)的標(biāo)準(zhǔn)是通過分區(qū)函數(shù)來決定的。創(chuàng)建數(shù)據(jù)分區(qū)函數(shù)有range“l(fā)eft|/right”兩種選擇。代表每個(gè)邊界值在局部的哪一邊。例如存在四個(gè)分區(qū),則定義三個(gè)邊界點(diǎn)值,并指定每個(gè)值是第一個(gè)分區(qū)的上邊界(left)還是第二個(gè)分區(qū)的下邊界(right)。代碼如下:create partition functionsendsmspf(datetime)as range right for values(20070401,20070701,20071001)3.創(chuàng)建分區(qū)方案創(chuàng)建分區(qū)函數(shù)后,必須將其與分區(qū)方案相關(guān)聯(lián),以便將分區(qū)指向至特定的文件組。就是定義實(shí)際存放數(shù)據(jù)的媒體與各數(shù)據(jù)塊的對(duì)應(yīng)關(guān)系。多個(gè)數(shù)據(jù)表可以共用相同的數(shù)據(jù)分區(qū)函數(shù),一般不共用相同的數(shù)據(jù)分區(qū)方案??梢酝ㄟ^不同的分區(qū)方案,使用相同的分區(qū)函數(shù),使不同的數(shù)據(jù)表有相同的分區(qū)條件,但存放在不同的媒介上。創(chuàng)建分區(qū)方案的代碼如下:create partition schemesendsmsps as partitionsendsmspf to (fg1,fg2,fg3,fg4) 4.創(chuàng)建分區(qū)表建立好分區(qū)函數(shù)和分區(qū)方案后,就可以創(chuàng)建分區(qū)表了。分區(qū)表是通過定義分區(qū)鍵值和分區(qū)方案相聯(lián)系的。插入記錄時(shí),sql server會(huì)根據(jù)分區(qū)鍵值的不同,通過分區(qū)函數(shù)的定義將數(shù)據(jù)放到相應(yīng)的分區(qū)。從而把分區(qū)函數(shù)、分區(qū)方案和分區(qū)表三者有機(jī)的結(jié)合起來。創(chuàng)建分區(qū)表的代碼如下:create table sendsmslog(idintidentity(1,1)not null,idnumnvarchar(50)null,sendcontenttextnullsenddatedatetimenotnull,)on sendsmsps(senddate)5.查看分區(qū)表信息系統(tǒng)運(yùn)行一段時(shí)間或者把以前的數(shù)據(jù)導(dǎo)入分區(qū)表后,我們需要查看數(shù)據(jù)的具體存儲(chǔ)情況,即每個(gè)分區(qū)存取的記錄數(shù),那些記錄存取在那個(gè)分區(qū)等。我們可以通過$partition.sendsmspf來查看,代碼如下:select$partition.sendsmspf(o.senddate)aspartition number,min(o.senddate)asmin senddate,max(o.senddate)asmax senddate,count(*)asrows in partitionfrom dbo.sendsmslog as ogroup by$partition.sendsmspf(o.senddate)order bypartition number6.維護(hù)分區(qū)分區(qū)的維護(hù)主要設(shè)計(jì)分區(qū)的添加、減少、合并和在分區(qū)間轉(zhuǎn)換??梢酝ㄟ^alter partition function的選項(xiàng)split,merge和alter table的選項(xiàng)switch來實(shí)現(xiàn)。split會(huì)多增加一個(gè)分區(qū),而megre會(huì)合并或者減少分區(qū),switch則是邏輯地在組間轉(zhuǎn)換分區(qū)。3.2 sql查詢語句的優(yōu)化數(shù)據(jù)庫的優(yōu)化通常可以通過對(duì)網(wǎng)絡(luò)、硬件、操作系統(tǒng)、數(shù)據(jù)庫參數(shù)和應(yīng)用程序的優(yōu)化來進(jìn)行。最常見的優(yōu)化手段就是對(duì)硬件的升級(jí)。根據(jù)統(tǒng)計(jì),對(duì)網(wǎng)絡(luò)、硬件、操作系統(tǒng)、數(shù)據(jù)庫參數(shù)進(jìn)行優(yōu)化所獲得的性能提升,全部加起來只占數(shù)據(jù)庫系統(tǒng)性能提升的40%左右,其余的60%系統(tǒng)性能提升來自對(duì)應(yīng)用程序的優(yōu)化。許多優(yōu)化專家認(rèn)為,對(duì)應(yīng)用程序的優(yōu)化可以得到80%的系統(tǒng)性能的提升。應(yīng)用程序的優(yōu)化通??煞譃閮蓚€(gè)方面:源代碼和sql語句。由于涉及到對(duì)程序邏輯的改變,源代碼的優(yōu)化在時(shí)間成本和風(fēng)險(xiǎn)上代價(jià)很高,而對(duì)數(shù)據(jù)庫系統(tǒng)性能的提升收效有限。所以sql語句的優(yōu)化對(duì)數(shù)據(jù)庫系統(tǒng)的性能起著決定性的作用。sql語言是一種靈活的語言,相同的功能可以使用不同的語句來實(shí)現(xiàn),但是語句的執(zhí)行效率是很不相同的。程序員可以通過查看查詢計(jì)劃來比較各種實(shí)現(xiàn)方案,并選出最優(yōu)的實(shí)現(xiàn)方案??偟脕碇v,程序員寫sql語句需要滿足考慮如下規(guī)則:3.2.1合理使用索引索引是一種供服務(wù)器在表中快速查找一個(gè)行的數(shù)據(jù)庫結(jié)構(gòu)。在關(guān)系數(shù)據(jù)庫中,一個(gè)行的物理位置無關(guān)緊要,除非數(shù)據(jù)庫需要找到它。為了能找到數(shù)據(jù)。表中的每一行均用一個(gè)rowid來標(biāo)識(shí),rowid告訴數(shù)據(jù)庫這一行的準(zhǔn)確位置(指出行所在的文件、該文件中的塊、該塊中的行地址)。每一個(gè)索引條目都由一個(gè)鍵值和rowid組成。可以索引一個(gè)列或一組列,sql server用b樹結(jié)構(gòu)存儲(chǔ)索引條目,以保證用最短路徑訪問鍵值,當(dāng)一個(gè)查詢?cè)L問索引時(shí),就能找到與查詢條件相匹配的索引條目。與條目相匹配的rowid值指向sql server提供相關(guān)行的物理位置,以減輕定位數(shù)據(jù)所需要的i/o負(fù)擔(dān)。從大多數(shù)系統(tǒng)應(yīng)用實(shí)例來看,查詢操作在各種數(shù)據(jù)庫的操作中,所占的比重最大。索引是數(shù)據(jù)庫的重要的數(shù)據(jù)結(jié)構(gòu),它的根本目的就是為了提高查詢速度。實(shí)踐證明在數(shù)據(jù)庫編程中,合理使用索引文件,對(duì)于改善數(shù)據(jù)查詢速度有著舉足輕重的作用,可以極大改善數(shù)據(jù)庫應(yīng)用程序的性能。在應(yīng)用過程中,用戶的查詢條件可能是多種多樣的,如果能根據(jù)用戶查詢建立和選擇索引,對(duì)于保證應(yīng)用程序的性能很有幫助。1.索引的使用要恰到好處,一般使用的原則為:(1)為主鍵所在的列創(chuàng)建索引。為經(jīng)常進(jìn)行連接,但是沒有指定為外鍵的字段建立索引,而不經(jīng)常連接的字段由數(shù)據(jù)庫優(yōu)化器自動(dòng)建立索引。(2)在頻繁進(jìn)行排序或分組(即使用group by或order by操作)的字段上建立索引。(3)在條件表達(dá)式中經(jīng)常用到的不同值較多的字段上建立索引,在不同值較少的字段上不要建立索引,如性別字段就不需要建立索引。不要在在查詢很少引用的列上創(chuàng)建索引。(4)如果經(jīng)常同時(shí)使用多個(gè)字段排序,可以在這些字段上建立復(fù)合索引。要盡量使關(guān)鍵查詢形成索引覆蓋,其前導(dǎo)字段一定是使用最頻繁的字段。(5)查看索引并刪除不使用的索引,維護(hù)索引需要一定的硬盤空間和時(shí)間,需要頻繁進(jìn)行數(shù)據(jù)查入操作的數(shù)據(jù)庫應(yīng)該有較少的索引,需要頻繁進(jìn)行讀取操作的數(shù)據(jù)庫應(yīng)該有更多的索引。(6)在聚集索引中,避免包括不必要的列,盡可能使用較小的數(shù)據(jù)類型,例如用varchar代替char。(7)考慮使用聚集索引來支持排序和范圍查詢,在為數(shù)據(jù)檢索而優(yōu)化表的時(shí)候,聚集索引應(yīng)該支持對(duì)記錄組的檢索。為了聚集鍵選擇列或列組,其中聚集鍵根據(jù)需要經(jīng)常排序的排序數(shù)據(jù)或?qū)Ρ仨氁黄鹪L問的記錄進(jìn)行分組。(8)具有高選擇性的列是索引的好候選列,具有高密度的列是索引最糟糕的候選列。2.維護(hù)索引在創(chuàng)建索引后,必須維護(hù)索引以確保可以獲得最佳的性能。經(jīng)過一段時(shí)間后,數(shù)據(jù)會(huì)變得支離破碎,要根據(jù)組織環(huán)境對(duì)數(shù)據(jù)碎片進(jìn)行整理。sql server 2000索引優(yōu)化向?qū)且粋€(gè)你會(huì)馬上喜歡上的工具。雖然并不完美,但是這個(gè)工具可以評(píng)估查詢運(yùn)行性能,并基于查詢,提出數(shù)據(jù)表上是否該添加聚集/非聚集索引的建議。索引優(yōu)化向?qū)г趕ql server 2000事件探查器的“工具”菜單下可以找到。使用索引優(yōu)化向?qū)?,首先要?jiǎng)?chuàng)建工作負(fù)載。工作負(fù)載表示一個(gè)事件跟蹤或者t-sql腳本。在很多情況下,你應(yīng)該選擇使用事件跟蹤,因?yàn)樗磻?yīng)了真實(shí)的數(shù)據(jù)庫行為。工作負(fù)載的創(chuàng)建必須能體現(xiàn)一段時(shí)間內(nèi)每天數(shù)據(jù)庫使用的情況。這樣,索引優(yōu)化向?qū)Ь涂梢曰谶@些實(shí)際運(yùn)行的統(tǒng)計(jì)行為來提出有用的建議。當(dāng)工作負(fù)載創(chuàng)建后,索引優(yōu)化向?qū)Ь秃芨櫵?。索引?yōu)化向?qū)龅木褪菑墓ぷ髫?fù)載中提取行為樣本,然后利用查詢優(yōu)化器進(jìn)行分析。一旦索引優(yōu)化向?qū)Х治鐾旯ぷ髫?fù)載后(如果工作負(fù)載很大,這會(huì)運(yùn)行幾個(gè)小時(shí)那么長),基于對(duì)工作負(fù)載的分析,提出最佳的聚集/非聚集索引建議。另外,如果數(shù)據(jù)庫上已經(jīng)有索引了,并且索引優(yōu)化向?qū)Оl(fā)現(xiàn)這些索引不是最佳的,那么會(huì)建議你移除。3在數(shù)據(jù)庫中放置索引用戶可以指定一個(gè)表的索引放置的位置。一個(gè)表的索引就該放置在與數(shù)據(jù)表不同的物理磁盤上,這樣可以減少文件之間的磁盤爭用。3.2.2優(yōu)化sql語句的一些具體策略1.應(yīng)用程序中,保證在實(shí)現(xiàn)功能的基礎(chǔ)上,盡量減少對(duì)數(shù)據(jù)庫的訪問次數(shù);通過搜索參數(shù),盡量減少對(duì)表的訪問行數(shù),最小化結(jié)果集,從而減輕網(wǎng)絡(luò)負(fù)擔(dān);能夠分開的操作盡量分開處理,提高每次的響應(yīng)速度;在數(shù)據(jù)窗口使用sql時(shí),盡量把使用的索引放在選擇的首列。2.算法的結(jié)構(gòu)盡量簡單;在查詢時(shí),不要過多地使用通配符如select * from t1語句,要用到幾列就選擇幾列,如:select col1,col2 from t1;在可能的情況下盡量限制結(jié)果集行數(shù),如:select top 300 col1,col2,col3 from t1,因?yàn)槟承┣闆r下用戶是不需要那么多的數(shù)據(jù)的。不要在應(yīng)用中使用數(shù)據(jù)庫游標(biāo),游標(biāo)是非常有用的工具,但比使用常規(guī)的、面向集的sql語句需要更大的開銷;按照特定順序提取數(shù)據(jù)的查找。3.避免使用不兼容的數(shù)據(jù)類型。例如float和int、char和varchar、binary和varbinary是不兼容的。數(shù)據(jù)類型的不兼容可能使優(yōu)化器無法執(zhí)行一些本來可以進(jìn)行的優(yōu)化操作。例如:select name from employee where salary60000在這條語句中,如salary字段是money型的,則優(yōu)化器很難對(duì)其進(jìn)行優(yōu)化,因?yàn)?0000是個(gè)整型數(shù)。我們應(yīng)當(dāng)在編程時(shí)將整型轉(zhuǎn)化成為貨幣型,而不要等到運(yùn)行時(shí)轉(zhuǎn)化。4.盡量避免在where子句中對(duì)字段進(jìn)行函數(shù)或表達(dá)式操作,這將導(dǎo)致引擎放棄使用索引而進(jìn)行全表掃描。如:(1)select * from t1 where f1/2=100應(yīng)改為:select * from t1 where f1=100*2(2)select * from record where substring(card_no,1,4)=5378應(yīng)改為:select * from record where card_no like5378%(3)select member_number,first_name,last_name from members wheredatediff(yy,datofbirth,getdate()21應(yīng)改為:select member_number,first_name,last_name from members wheredateofbirth0(2).select sum(t1.c1)from t1 where exists(select*from t2where t2.c2=t1.c2)兩者產(chǎn)生相同的結(jié)果,但是后者的效率顯然要高于前者。因?yàn)楹笳卟粫?huì)產(chǎn)生大量鎖定的表掃描或是索引掃描。8.如果你想校驗(yàn)表里是否存在某條記錄,不要用count(*)那樣效率很低,而且浪費(fèi)服務(wù)器資源??梢杂胑xists代替。如:if(select count(*)from table_name where column_name=xxx)0可以寫成:if exists(select*from table_name where column_name=x
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度內(nèi)陸水路貨物運(yùn)輸代理合同樣本
- 二零二五年度廣告?zhèn)髅叫袠I(yè)設(shè)計(jì)人員派遣合同范本2篇
- 二零二五年度土地征收與補(bǔ)償安置合同模板
- 2025年度上市公司人事勞動(dòng)合同模板2篇
- 2025年度個(gè)人旅游線路設(shè)計(jì)服務(wù)合同4篇
- 二零二五年度電梯鋼結(jié)構(gòu)高空作業(yè)安全防護(hù)承包合同2篇
- 2025版智慧苗圃基地規(guī)劃設(shè)計(jì)施工一體化合同4篇
- 二零二五版內(nèi)墻批灰與智能家居照明系統(tǒng)合同4篇
- 課題申報(bào)參考:面向破損兵馬俑修復(fù)的碎片多尺度全局T o k e n掩碼學(xué)習(xí)分類研究
- 2025年度商鋪?zhàn)赓U合同(含租賃物安全責(zé)任)
- 中國減肥行業(yè)市場分析與發(fā)展趨勢講義
- 海通食品集團(tuán)楊梅汁產(chǎn)品市場營銷
- 教學(xué)查房及體格檢查評(píng)分標(biāo)準(zhǔn)
- 西方經(jīng)濟(jì)學(xué)(第二版)完整整套教學(xué)課件
- 人教版高一數(shù)學(xué)上冊(cè)期末考試試卷及答案
- 圍術(shù)期下肢深靜脈血栓預(yù)防的術(shù)中護(hù)理
- 三方采購協(xié)議范本
- 《材料分析測試技術(shù)》全套教學(xué)課件
- 安全學(xué)原理第2版-ppt課件(完整版)
- 傾聽是一種美德
- 武漢東湖賓館建設(shè)項(xiàng)目委托代建合同
評(píng)論
0/150
提交評(píng)論