前言
本書第1版自2015年2月出版后,在市場上獲得了強烈的反響,當月在當當網的新書熱賣榜中排名第二,半年內銷售近萬冊,至2016年1月已經印刷了5次,共發行近兩萬冊,圖書被收錄進百度百科。
如此巨大的市場銷量和好評,引起筆者的深思,除本書構思巧妙、內容翔實、文法流暢等主觀因素外,宏觀的市場環境也是不容忽視的。2015年,中國經濟由原來的爆發式增長進入到略顯低迷的新常態,無論是企業還是商家都感受到了壓力,錢不再像以前那樣好賺了。如何實現經濟增長,如何讓企業存活下去,這就需要深挖企業內部的痛點和洞察外部客戶的特點。深挖和洞察的過程就是數據分析的過程,數據分析時代在中國悄然到來了。
隨著數據分析師的價值凸顯,有越來越多先知先覺的人們紛紛轉行加入到數據分析師的大軍中。而統計學是數據分析師們必修的課程之一,“從零進階!數據分析的統計基礎”的本意就是讓更多的人能從零基礎快速進階到數據分析領域,并且重點講述數據分析師們必須具備的概率和統計的關鍵知識點。而經管之家(原人大經濟論壇)適時地推出本書,使其得到了很好的市場回饋。正所謂天時地利人和,造就了一本好書。
為了和市場的發展緊密結合,以及更好地適應讀者的需求,本書進行了改版。本次改版繼續堅持從零進階,強化數據分析基礎理論,和市場接軌等核心理念,繼續使用“三國武將”這個大家都耳熟能詳的業務背景知識。根據學員的需求和市場的實際情況,作者還對本書內容進行了如下調整。
(1)進一步精練數據分析的理論基礎,去除了一些不必要的數學公式。由于數據分析涉及概率論、微積分、數理統計的很多內容,但有些內容又不用全部學會,這讓初學者很難找出哪些是需要學習的內容,哪些是不需要學習的內容。因此在編寫本書第1版時,將很多數據分析師不需要知道的知識點都省略了,比如省略了統計量服從某個分布的證明過程,省略了抽樣平均誤差的證明過程。這樣做的目的是為了讓數據分析師們能更快地進入這個領域,更好地洞察數據。在編寫本書的第2版時,繼續沿用此思想,去掉了一些數據分析師不必要知道的公式,增加了更多的數據分析思想的內容。
(2)將原來的第3章抽樣估計分解成數理統計基礎和抽樣估計兩章,這樣做的目的是考慮到原來的第3章涉及的理論內容太多,并且比較枯燥,將其分成兩部分,一來可以在每一部分增加更多的公式解讀內容,也可以補充更多的案例進來;二來降低了閱讀難度,使讀者能在學習知識的同時,獲得更多的成就感,從而更加有興趣學習。
(3)對試驗數據進行了更多的數據分析,增加了對讀者數據分析思維的培養。尤其是第2章的描述性數據分析過程,進行了更深入的數據分析過程剖析,主要宗旨在于讓讀者更快地進入到數據分析行業的隊伍中來。當然,這也使得第2版中的三國武將數據和第1版中的數據存在一些差異。
當然,僅就本書而言,讀者并不會學到數據分析師所需要的全部知識,這需要幾年的循序漸進學習,但我希望讀者看過本書后,能快速具有數據分析師所需要的最基本的統計學知識,能快速地進入到數據分析的行業,從而具備一個數據分析師應具備的最起碼的知識,在工作中能說內行話,而不是說行外話。
在本書改版之際,作者衷心感謝經管之家(原人大經濟論壇)和CDA課程研發團隊多年來始終不渝的關心與鼎力支持,感謝關繼杰,感謝廣大讀者給予我的理解與感受,感謝電子工業出版社多年來的密切合作與支持。沒有這一切,本書不可能取得這么好的成果,我永遠感謝曾經幫助和支持過我的相識的和不相識的同志和朋友。由于作者水平有限,本書肯定會有不少缺點和不足,熱切期望得到專家和讀者的批評指正。
曹正鳳
2016年3月于北京
Oracle數據庫性能調優實踐(一)——概述
摘要:Oracle數據庫應用系統的調優主要包括八個方面:1、優化連接數/會話數;2、優化數據庫內存;3、優化SQL語句;4、優化索引;5、優化磁盤I/O;6、優化數據存儲;7、優化操作系統環境;8、定期生成數據庫對象使用狀態的統計信息。數據庫性能調優的實質就是優化內存、降低CPU負載、改善I/O性能。詳細內容請看下文。
1、優化連接數/會話數
查詢數據庫當前進程的連接數:
SQL> select count(*) from v$process;
查看數據庫當前會話的連接數:
SQL> select count(*) from v$session;
查看數據庫的并發連接數:
SQL> select count(*) from v$session where status='ACTIVE';
查看當前數據庫建立的會話情況:
SQL> select sid,serial#,,program,machine,status from v$session;
查詢數據庫允許的最大連接數:
SQL> select value from v$ where name = '';
如果需要修改數據庫允許的最大連接數,執行alter指令:
SQL> alter system set = 1200 scope = spfile;
(注意:執行alter語句并commit后,需要重啟數據庫才能實現連接數的修改操作生效。)
2、優化數據庫內存
對Oracle數據庫來說,Oracle 實例= 內存結構 + 進程結構,而內存結構 = SGA + PGA。SGA(系統全局區)是用戶存儲數據庫信息的內存區,該區域為數據庫進程所共享。它包含服務器的數據和控制信息,主要包含高速數據緩沖區、共享池、重做日志緩存區、Java池,大型池等內存結構。SGA的設置,理論上SGA的大小應該占OS的內存的 1/3-1/2左右。SGA + PGA + OS使用的內存 < 服務器中的物理內存。
查看當前系統SGA的信息的指令為:
SQL> select name,bytes/1024/1024 as "Size(M)" from v$sgainfo;
備注:根據查詢信息顯示當前還有10240M可用的SGA內存,系統當前的內存配置還是比較充足的。
不過,我們在實際使用過程中還是可以根據實際需求重新分配內存。
增大系統全局區:
SQL> alter system set =12000m scope=spfile;
增大數據緩存區:
SQL> alter system set =7000m scope=spfile;
增大共享內存區:
SQL> alter system set =3200m scope=spfile;
增大程序全局區:
SQL> alter system set =5000m scope=spfile;
增大排序區:
SQL> alter system set =3000m scope=spfile;
(注意:執行alter語句并commit后,需要重啟數據庫才能實現連接數的修改操作生效。)
3、優化SQL語句
SQL 調優的目標是簡單的:第一、消除不必要的大表全表搜索,不必要的全表搜索導致大量不必要的 I/O ,從而拖慢整個數據庫的性能。第二、確保最優的索引使用 ,對于改善查詢的速度,這是特別重要的。有時 Oracle 可以選擇多個索引來進行查詢,必須檢查每個索引并且確保 Oracle 使用正確的索引。第三、確保最優的 JOIN 操作:有些查詢使用nested loop join嵌套循環連接快一些,有些則hash join散列連接快一些,另外一些則是sort merge join排序合并連接更快。這三個調優規則看來簡單,不過它們占 SQL 調優任務的 90%,需要深入學習 。
4、優化索引
數據庫索引是建立在數據表的一列或多個列上的輔助對象,目的是加快訪問表中的數據。索引是數據庫維護的可選結構,比較難的是怎么準確地判斷在什么地方需要使用索引,使用索引有利于調節檢索速度。當建立一個索引時,必須指定用于跟蹤的表名以及一個或多個表列。一旦建立了索引,在用戶表中建立、更改和刪除數據庫時,數據庫就自動地維護索引。如果需要創建索引,請參考下列三個準則:第一、索引應該在SQL語句的"where"或"and"部分涉及的表列被建立。第二、創建索引具有一定范圍的表列,這里有一個大致的原則,如果表中列的值占該表中行的20%以內,這個表列就可以作為候選索引表列。第三、如果在SQL語句中多個表列被一起連續引用,則應該考慮將這些表列一起放在一個索引內,數據庫將維護單個表列的索引(建立在單一表列上)或復合索引(建立在多個表列上)。
怎么監控無用的索引,如果在一段時間內,發現沒有被使用的索引,一般就是無用的索引。其查詢指令為:
開始監控:
SQL> alter index usage;
檢查使用狀態:
SQL> select * from v$;
停止監控:
SQL> alter index usage;
5、優化磁盤I/O
使用指令查看數據文件的I/O:
SQL> SELECT NAME,PHYRDS,PHYWRTS FROM V$ DF,V$ FS WHERE DF.FILE#=FS.FILE# order by readtim desc;
用以下查詢語句可以得到各表空間讀寫次數,phyrds+phywrts 即是磁盤I/O量。
select name,phyrds,phywrts from v$,v$ where v$.file# = v$.file# order by readtim desc;
說明:如果發現在磁盤上的寫入和讀取次數上出現很大的差別,就表明肯定有哪個磁盤負載過多。出現磁盤負載不平衡,這時可以通過移動數據文件來均衡文件I/O:
SQL>alter offline;
$cp /disk1/test.dbf /disk2/test.dbf;
SQL>alter rename '/disk1/test.dbf' to '/disk2/test.dbf';
SQL>alter online;
$rm /disk1/test.dbf
6、優化數據存儲
查詢數據庫中各個表的實際數據存儲使用情況的語句:
SQL> select , sum(bytes)/1024/1024 MB from u group by ;
查詢表空間對應的存儲文件的語句:
SQL> select ,file_id,,round(bytes / (1024 * 1024), 0) from sys. order by ;
說明:可以通過擴展表空間對應存儲文件的方式擴展表空間。其擴容語句為 alter '表空間位置' resize 新的容量。
7、優化操作系統環境
操作系統優化時應該考慮的因素有:內存的使用;CPU的使用;IO級別;網絡流量等。各個因素互相影響,正確的優化次序是內存、IO、CPU、網絡流量。操作系統使用了虛擬內存的概念,虛擬內存使每個應用感覺自己是使用內存的唯一的應用,每個應用都看到地址從0開始的單獨的一塊內存,虛擬內存被分成4K或8K的page,操作系統通過MMU(memory unit)管理單元將這些page與物理內存進行映射。
8、定期生成數據庫運行狀況統計信息
從ORACLE 10g開始,Oracle在建庫后就默認創建了一個名為的定時任務,用于自動收集CBO的統計信息。
這個自動任務默認情況下在工作日晚上10:00-6:00和周末全天開啟。
調用.收集統計信息。該過程首先檢測統計信息缺失和陳舊的對象。然后確定優先級,再開始進行統計信息。
可以通過以下查詢這個JOB的運行情況:
SELECT * FROM WHERE = '';
可以通過下面語句查看JOB任務:
SQL> SELECT , FROM ;
說明:關閉及開啟自動搜集功能,有兩種方法,分別如下:
方法一:exec .disable('SYS.');
exec .enable('SYS.');
方法二:alter system set "_job"=false scope=spfile;
alter system set "_job"=true scope=spfile;
*請認真填寫需求信息,我們會在24小時內與您取得聯系。