客戶端模式:面向開發人員,因此從運維角度來看,缺乏透明度,數據排查等任務比較復雜,由于少了中間環節,因此SQL時延最低 中間件模式:模擬一個數據庫Server,因此對于使用者來說就好象一個真實的數據庫服務器,運維和數據排查比較容易,管理調整方便,并且可以搭建集群,增加吞吐量,另外中間件模式可以實現更多高級功能,比如后端數據庫資源共享、數據緩存、SQL攔截等保護機制,從整個平臺的角度來看,整體收益要更好,但因為存在一個中間環節,因此帶來SQL時延和一定的單機性能損耗,經測評,這個損耗在5%-10%之間,基本感知不到。
使用 fill factor 選項可以指定 Microsoft SQL Server 2005 使用現有數據創建新索引時將每頁填滿到什么程度。由于在頁填充時 SQL Server 必須花時間來拆分頁,因此填充因子會影響性能。
1、下載源碼(存放到/usr/local目錄) wget http://cdn.mysql.com/Downloads/MySQL-5.7/mysql-5.7.10.tar.gz wget http://jaist.dl.sourceforge.net/project/boost/boost/1.59.0/boost_1_59_0.zip 2、解壓 tar zxvf mysql-5.7.10.tar.gz unzip boost_1_59_0.zip 解壓后改名為mysql、boost
ERWin:界面相當簡潔漂亮,采用ER模型,如果是開發中小型數據庫,那么推薦ERWin,它的diagram給人的感覺十分清晰,在一個實體中,不同的屬性類型采用可定制的圖標顯示,實體與實體的關系也一目了然。它提供的功能如PowerDesigner一樣強大,但是不支持UML。ERWin支持idef1x即信息建模,就是ER圖、實體關系圖,也就是數據庫結構圖。
今天,數據庫的操作越來越成為整個應用的性能瓶頸了,這點對于Web應用尤其明顯。關于數據庫的性能,這并不只是DBA才需要擔心的事,而這更是我 們程序員需要去關注的事情。當我們去設計數據庫表結構,對操作數據庫時(尤其是查表時的SQL語句),我們都需要注意數據操作的性能。這里,我們不會講過 多的SQL語句的優化,而只是針對MySQL這一Web應用最多的數據庫。希望下面的這些優化技巧對你有用。
所謂工欲善必先利其器,要在vmware下做linux系統的oracle rac,我們也需要準備好相關的裝備。 頭號選手:VMware server,可免費下載,并可免費申請注冊碼,地址:http://www.vmware.com/download/server/ ,這里不建議使用VMware workstation,因為workstation不支持共享存儲,雖然網上也有號稱使用workstation裝成功的案例,但第一不知他們是如何解決存儲共享的問題,第二搜索的到更多都是失敗的案例。三思這里用的是vmware server1.06
1) 選擇最有效率的表名順序(只在基于規則的優化器中有效): ORACLE的解析器按照從右到左的順序處理FROM子句中的表名,FROM子句中寫在最后的表(基礎表 driving table)將被最先處理,在FROM子句中包含多個表的情況下,你必須選擇記錄條數最少的表作為基礎表。如果有3個以上的表連接查詢, 那就需要選擇交叉表(intersection table)作為基礎表, 交叉表是指那個被其他表所引用的表.
表空間:是一個或多個數據文件的邏輯集合 表空間邏輯存儲對象:永久段-->如表與索引 臨時段-->如臨時表數據與排序段 回滾段-->用于事物回滾或閃回內存的撤銷數據 表空間分類:系統表空間(system、sysaux),非系統表空間
exists對外表用loop逐條查詢,每次查詢都會查看exists的條件語句,當 exists里的條件語句能夠返回記錄行時(無論記錄行是的多少,只要能返回),條件就為真,返回當前loop到的這條記錄,反之如果exists里的條 件語句不能返回記錄行,則當前loop到的這條記錄被丟棄,exists的條件就像一個bool條件,當能返回結果集則為true,不能返回結果集則為 false
實驗一 創建用戶并授權 1.實驗內容: 通過iSqlplus建立自己的用戶,并給予相應的授權,體會用戶、角色和權限的關系 創建用戶:create user 用戶名 identified by ‘密碼’; 用戶授權:grant create session to 用戶名; grant create table to 用戶名;
觸發器類似于函數和過程,它們都是具有聲明部分、執行部分和異常處理部分的程序實體單元。觸發器必須在數據庫中以獨立對象的身份存儲。觸發器是在事件發生時隱式地運行的,不能接收參數,不能被調用。運行觸發器的方式叫做激發(firing)觸發器,觸發事件可以是對數據庫表的DML(INSERT、UPDATE或DELETE)操作或某種視圖的操作觸發器的用途通過記錄修改內容和修改者來審計表中的信息。在表內容發生變更時,自動通知其他程序采取相應的處理。在訂閱發布環境下,發布有關各種事件的信息。維護在表創建階段通過聲明限制無法實現的復雜完整性限制。觸發器主要用于促進引用的完整性 只能在無法使用下列表級別限制時使用它們 NOT NULL、UNIQUE KEY、PRIMARY KEY、FOREIGN KEY、CHECK
1. 假設有一個名為email_table 的表,包含名字和地址兩個字段,要得到Bill Gates 的e_mail地址,你可以使用下面的查詢: SELECT email from email_table WHERE name=’Bill Gates’ 2. 前面說過,查詢可以在查詢條件中包含邏輯運算符。假如你想讀取Bill Gates 或Clinton總統的所有email地址,你可以使用下面的查詢語句: SELECT email FROM email_table WHERE name=’Bill Gates’ OR name=’president Clinton’ (select name,email,[add] from name where name='zhd') 單詞不完整時,默認加[ ]
Oracle編譯PL/SQL程序塊分為兩種:靜態SQL與動態SQL 所謂靜態 SQL,即早期綁定(early binding),指在PL/SQL塊中使用的SQL語句在編譯時是明確的,執行的是確定對象,大多數的編譯情況屬于這種類型。 而動態SQL,即后期綁定(late binding),是指在PL/SQL塊編譯時SQL語句是不確定的,如根據用戶輸入的參數的不同而執行不同的操作。編譯程序對動態語句部分不進行處理,只是在程序運行時動態地創建語句、對語句進行語法分析并執行該語句。例如當查詢條件為用戶輸入時,那么Oracle的SQL引擎就無法在編譯期對該程序語句進行確定,只能在用戶輸入一定的查詢條件后才能提交給SQL引擎進行處理。 本文主要就動態SQL的開發進行討論,并在最后給出一些實際開發的技巧。
1.2 索引特點: 第一,通過創建唯一性索引,可以保證數據庫表中每一行數據的唯一性。 第二,可以大大加快數據的檢索速度,這也是創建索引的最主要的原因。 第三,可以加速表和表之間的連接,特別是在實現數據的參考完整性方面特別有意義。 第四,在使用分組和排序子句進行數據檢索時,同樣可以顯著減少查詢中分組和排序的時間。
Redis使用標準C編寫實現,而且將所有數據加載到內存中,所以速度非常快。官方提供的數據表明,在一個普通的Linux機器上,Redis讀寫速度分別達到81000/s和110000/s。 通常,Redis將數據存儲于內存中,或被配置為使用虛擬內存。通過兩種方式可以實現數據持久化:使用截圖的方式,將內存中的數據不斷寫入磁盤;或使用類似MySQL的日志方式,記錄每次更新的日志。前者性能較高,但是可能會引起一定程度的數據丟失;后者相反。
MyCAT性能調優指南JVM調優:內存占用分兩部分:java堆內存+直接內存映射(DirectBuffer占用),建議堆內存適度大小,直接映射內存盡可能大,兩種一起占據操作系統的1/2-2/3的內存。下面以服務器16G內存為例,Mycat堆內存4G,直接內存映射6G,JVM參數如下:-server-Xms4G–Xmx4GXX:MaxPermSize=64M-XX:MaxDirectMemorySize=6G用mycatconsole等命令啟動MyCAT的,JVM參數都在conf\wrapper.con文件中,下面是一段實例:#JavaAdditionalParameterswrapper.java.additional.5=-XX:MaxDirectMemorySize=2Gwrapper.java.additional.6=-Dcom.sun.management.jmxremote#InitialJavaHeapSize(inMB)wrapper.java.initmemory=2048#MaximumJavaHeapSize(inMB)wrapper.java.maxmemory=2048操作系統調優:最大文件句柄數量的修改,設置為5000-1萬,在MycatServer和Mysql數據庫的機器上都設置。Linux操作系統對一個進程打開的文件句柄數量的限制(也包含打開的SOCKET數量,可影響MySQL的并發連接數目).這個值可用ulimit命令來修改,但ulimit命令修改的數值只對當前登錄用戶的目前使用環境有效,系統重啟或者用戶退出后就會失效。Mysql調優:最大連接數設置為2000[mysqld]中有參數max_connections=2000mysql>showglobalstatuslike'Max_used_connections';MySQL服務器過去的最大連接數是245,沒有達到服務器連接數上限256,應該沒有出現1040錯誤,比較理想的設置是:Max_used_connections/max_connections*100%≈85%最大連接數占上限連接數的85%左右,如果發現比例在10%以下,MySQL服務器連接上線就設置得過高了。Mycat調優:Conf/log4j.xml中,日志級別調整為至少info級別,默認是debug級別,用于排查錯誤,不能用于性能測試和正式生產中。conf/server.xml中有如下參數可以調整:<system><!—CPU核心數越多,可以越大,當發現系統CPU壓力很小的情況下,可以適當調大此參數,如4核心的4CPU,可以設置為16,24核心的可以最大設置為128——><propertyname="processors">1</property>下面這個參數為每個processor的線程池大小,建議可以是16-64,根據系統能力來測試和確定。<propertyname="processorExecutor">16</property></system>System中以下重要參數也根據情況進行調整processorBufferPool:每個processor分配的SocketDirectBuffer,用于網絡通信,每個processor上管理的所有連接共享,processorBufferChunk為Pool的最小分配單元,每個POOL的容量即為processorBufferPool/processorBufferChunk,默認前者為1024*1024*16=16M,后者為4096字節。processorBufferPool參數的調整,需要觀察show@@processor的結果來確定:BU_PERCENT為已使用的百分比、BU_WARNS為SocketBufferPool不夠時,臨時創新的新的BUFFER的次數,若百分比經常超過90%并且BU_WARNS>0,則表明BUFFER不夠,需要增大processorBufferPool。基本上,連接數越多,并發越高,需要的POOL越大,建議BU_PERCENT最大在40-80%之間。conf/schema.xml中有如下參數可以調整:<schemaname="TESTDB"checkSQLschema="true">,checkSQLschema屬性建議設置為false,要求開發中,不能在sql中添加數據庫的名稱,如select*fromTESTDB.company,這樣可以優化SQL解析。<dataHostname="localhost1"maxCon="500"minCon="10"balance="0"dbType="mysql"dbDriver="native"banlance="0"><!—最大連接池maxCon,可以改
OracleAnalyticFunctionsInPracticeBydingjun1232013.06http://blog.chinaunix.net/uid/7655508.html主要內容甲:我有個SQL,你能幫我用分析函數改寫下嗎?乙:相關列有索引嗎?甲:owner有索引,選擇性不錯,我想用分析函數改寫看看?乙:哦,知道了,這是典型的top-n查詢。SELECTowner,object_typeFROMdemo2WHEREowner='DINGJUN123'ANDtrunc(created,'dd')=(SELECTMAX(trunc(created,'dd'))FROMdemo2WHEREowner='DINGJUN123')SELECTowner,object_typeFROM(SELECTowner,object_type,dense_rank()over(ORDERBYtrunc(created,'dd')DESC)rnFROMdemo2WHEREowner='DINGJUN123')WHERErn=1分析函數作用子查詢方法總行數:667827返回9行原始SQL:邏輯讀848,COST:1103優點:最容易想到缺點:多次訪問表或索引分析函數方法分析SQL:邏輯讀423,COST:693優點:減少表或索引的訪問次數,邏輯讀和COST是常規方法的一半,SQL簡單缺點:需要排序操作進一步優化建立owner,trunc(created,’dd’)desc復合索引作用對于原始SQL子查詢可以快速掃描,分析函數消除排序優化后原始SQL邏輯讀/COST:111/171,分析函數:6/767------------------------------------------------------------|Id|Operation|Name|Rows|------------------------------------------------------------|0|SELECTSTATEMENT||202||*1|TABLEACCESSBYINDEXROWID|DEMO2|202||*2|INDEXRANGESCAN|IDX_DEMO2|20237||3|SORTAGGREGATE||1||4|TABLEACCESSBYINDEXROWID|DEMO2|20237||*5|INDEXRANGESCAN|IDX_DEMO2|20237|PredicateInformation(identifiedbyoperationid):-------------------------------------------------------------1-filter(TRUNC(INTERNAL_FUNCTION("CREATED"),'fmdd')=(SELECTMAX(TRUNC(INTERNAL_FUNCTION("CREATED"),'fmdd'))FROM"DEMO2""DEMO2"WHERE"OWNER"='DINGJUN123'))2-access("OWNER"='DINGJUN123')5-access("OWNER"='DINGJUN123')------------------------------------------------------------|Id|Operation|Name|Rows|------------------------------------------------------------|0|SELECTSTATEMENT||20237||*1|VIEW||20237||*2|WINDOWSORTPUSHEDRANK||20237||3|TABLEACCESSBYINDEXROWID|DEMO2|20237||*4|INDEXRANGESCAN|IDX_DEMO2|20237|------------------------------------------------------------PredicateInformation(identifiedbyoperationid):---------------------------------------------------1-filter("RN"=1)2-filter(DENSE_RANK()OVER(ORDERBYTRUNC(INTERNAL_FUNCTION("CREATED"),'fmdd')DESC)<=1)4-access("OWNER"='DINGJUN123')分析函數作用分析函數的作用總結---------------------------------------------
創建存儲過程,存儲過程是保存起來的可以接受和返回用戶提供的參數的 Transact-SQL 語句的集合。可以創建一個過程供永久使用,或在一個會話中臨時使用(局部臨時過程),或在所有會話中臨時使用(全局臨時過程)。也可以創建在 Microsoft SQL Server啟動時自動運行的存儲過程。
織夢cms數據庫