<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    2012年12月1日

    Oracle 臨時表空間暴漲(轉)

    http://blog.csdn.net/weikaifenglove/article/details/4059258            昨天在做測試的時候發現一個非常奇怪的問題:在程序的查詢模塊中做查詢的時候,開始速度很快,但是過了一段時間以后速度就變慢,最后干脆就報錯,不工作了。在排錯的過程中,發現Oracle臨時表空間暴漲,達到了幾十個GB,在Oracle中對Session進行跟蹤,發現磁盤空間還在不停的消耗,幾乎是每隔5s,臨時表空間就會增長500MB左右,最后報錯的原因應該是因為沒有磁盤空間可以分配造成的。這是一件十分恐怖的事情。

            我們知道Oracle臨時表空間主要是用來做查詢和存放一些緩存的數據的,磁盤消耗的一個主要原因是需要對查詢的結果進行排序,如果沒有猜錯的話,在磁盤空間的(內存)的分配上,Oracle使用的是貪心算法,如果上次磁盤空間消耗達到1GB,那么臨時表空間就是1GB,如果還有增長,那么依此類推,臨時表空間始終保持在一個最大的上限。像上文提到的恐怖現象經過分析可能是以下幾個方面的原因造成的。
            1. 沒有為臨時表空間設置上限,而是允許無限增長。但是如果設置了一個上限,最后可能還是會面臨因為空間不夠而出錯的問題,臨時表空間設置太小會影響性能,臨時表空間過大同樣會影響性能,至于需要設置為多大需要仔細的測試。
            2.查詢的時候連表查詢中使用的表過多造成的。我們知道在連表查詢的時候,根據查詢的字段和表的個數會生成一個迪斯卡爾積,這個迪斯卡爾積的大小就是一次查詢需要的臨時空間的大小,如果查詢的字段過多和數據過大,那么就會消耗非常大的臨時表空間。
           3.對查詢的某些字段沒有建立索引。Oracle中,如果表沒有索引,那么會將所有的數據都復制到臨時表空間,而如果有索引的話,一般只是將索引的數據復制到臨時表空間中。
           針對以上的分析,對查詢的語句和索引進行了優化,情況得到緩解,但是需要進一步測試。

           總結:
           1.SQL語句是會影響到磁盤的消耗的,不當的語句會造成磁盤暴漲。
           2.對查詢語句需要仔細的規劃,不要想當然的去定義一個查詢語句,特別是在可以提供用戶自定義查詢的軟件中。
           3.仔細規劃表索引。

    臨時表空間使用注意:
    1.臨時表空間 是用于在進行排序操作(如大型查詢,創建索引和聯合查詢期間存儲臨時數據)
    每個用戶都有一個臨時表空間
    2.對于大型操作頻繁,(大型查詢,大型分類查詢,大型統計分析等),應指定單獨的臨時表空間,以方便管理

    3.分配用戶單獨臨時表空間,一般是針對 大型產品數據庫,OLTP數據庫,數據庫倉庫
    對于小型產品不需要單獨制定臨時表空間,使用默認臨時表空間
    原文鏈接:
    http://blog.csdn.net/weikaifenglove/article/details/4059258

    posted @ 2013-09-02 13:51 Alter 閱讀(281) | 評論 (0)編輯 收藏

    完整java開發中JDBC連接數據庫代碼和步驟

    1. JDBC連接數據庫   
    2. •創建一個以JDBC連接數據庫的程序,包含7個步驟:   
    3.  1、加載JDBC驅動程序:   
    4.     在連接數據庫之前,首先要加載想要連接的數據庫的驅動到JVM(Java虛擬機),   
    5.     這通過java.lang.Class類的靜態方法forName(String  className)實現。   
    6.     例如:   
    7.     try{   
    8.     //加載MySql的驅動類   
    9.     Class.forName("com.mysql.jdbc.Driver") ;   
    10.     }catch(ClassNotFoundException e){   
    11.     System.out.println("找不到驅動程序類 ,加載驅動失敗!");   
    12.     e.printStackTrace() ;   
    13.     }   
    14.    成功加載后,會將Driver類的實例注冊到DriverManager類中。   
    15.  2、提供JDBC連接的URL   
    16.    •連接URL定義了連接數據庫時的協議、子協議、數據源標識。   
    17.     •書寫形式:協議:子協議:數據源標識   
    18.     協議:在JDBC中總是以jdbc開始   
    19.     子協議:是橋連接的驅動程序或是數據庫管理系統名稱。   
    20.     數據源標識:標記找到數據庫來源的地址與連接端口。   
    21.     例如:(MySql的連接URL)   
    22.     jdbc:mysql:   
    23.         //localhost:3306/test?useUnicode=true&characterEncoding=gbk ;   
    24.    useUnicode=true:表示使用Unicode字符集。如果characterEncoding設置為   
    25.    gb2312或GBK,本參數必須設置為true 。characterEncoding=gbk:字符編碼方式。   
    26.  3、創建數據庫的連接   
    27.     •要連接數據庫,需要向java.sql.DriverManager請求并獲得Connection對象,   
    28.      該對象就代表一個數據庫的連接。   
    29.     •使用DriverManager的getConnectin(String url , String username ,    
    30.     String password )方法傳入指定的欲連接的數據庫的路徑、數據庫的用戶名和   
    31.      密碼來獲得。   
    32.      例如:   
    33.      //連接MySql數據庫,用戶名和密碼都是root   
    34.      String url = "jdbc:mysql://localhost:3306/test" ;    
    35.      String username = "root" ;   
    36.      String password = "root" ;   
    37.      try{   
    38.     Connection con =    
    39.              DriverManager.getConnection(url , username , password ) ;   
    40.      }catch(SQLException se){   
    41.     System.out.println("數據庫連接失敗!");   
    42.     se.printStackTrace() ;   
    43.      }   
    44.  4、創建一個Statement   
    45.     •要執行SQL語句,必須獲得java.sql.Statement實例,Statement實例分為以下3  
    46.      種類型:   
    47.       1、執行靜態SQL語句。通常通過Statement實例實現。   
    48.       2、執行動態SQL語句。通常通過PreparedStatement實例實現。   
    49.       3、執行數據庫存儲過程。通常通過CallableStatement實例實現。   
    50.     具體的實現方式:   
    51.         Statement stmt = con.createStatement() ;   
    52.        PreparedStatement pstmt = con.prepareStatement(sql) ;   
    53.        CallableStatement cstmt =    
    54.                             con.prepareCall("{CALL demoSp(? , ?)}") ;   
    55.  5、執行SQL語句   
    56.     Statement接口提供了三種執行SQL語句的方法:executeQuery 、executeUpdate   
    57.    和execute   
    58.     1、ResultSet executeQuery(String sqlString):執行查詢數據庫的SQL語句   
    59.         ,返回一個結果集(ResultSet)對象。   
    60.      2int executeUpdate(String sqlString):用于執行INSERT、UPDATE或   
    61.         DELETE語句以及SQL DDL語句,如:CREATE TABLE和DROP TABLE等   
    62.      3、execute(sqlString):用于執行返回多個結果集、多個更新計數或二者組合的   
    63.         語句。   
    64.    具體實現的代碼:   
    65.           ResultSet rs = stmt.executeQuery("SELECT * FROM ...") ;   
    66.     int rows = stmt.executeUpdate("INSERT INTO ...") ;   
    67.     boolean flag = stmt.execute(String sql) ;   
    68.  6、處理結果   
    69.     兩種情況:   
    70.      1、執行更新返回的是本次操作影響到的記錄數。   
    71.      2、執行查詢返回的結果是一個ResultSet對象。   
    72.     • ResultSet包含符合SQL語句中條件的所有行,并且它通過一套get方法提供了對這些   
    73.       行中數據的訪問。   
    74.     • 使用結果集(ResultSet)對象的訪問方法獲取數據:   
    75.      while(rs.next()){   
    76.          String name = rs.getString("name") ;   
    77.     String pass = rs.getString(1) ; // 此方法比較高效   
    78.      }   
    79.     (列是從左到右編號的,并且從列1開始)   
    80.  7、關閉JDBC對象    
    81.      操作完成以后要把所有使用的JDBC對象全都關閉,以釋放JDBC資源,關閉順序和聲   
    82.      明順序相反:   
    83.      1、關閉記錄集   
    84.      2、關閉聲明   
    85.      3、關閉連接對象   
    86.           if(rs != null){   // 關閉記錄集   
    87.         try{   
    88.             rs.close() ;   
    89.         }catch(SQLException e){   
    90.             e.printStackTrace() ;   
    91.         }   
    92.           }   
    93.           if(stmt != null){   // 關閉聲明   
    94.         try{   
    95.             stmt.close() ;   
    96.         }catch(SQLException e){   
    97.             e.printStackTrace() ;   
    98.         }   
    99.           }   
    100.           if(conn != null){  // 關閉連接對象   
    101.          try{   
    102.             conn.close() ;   
    103.          }catch(SQLException e){   
    104.             e.printStackTrace() ;   
    105.          }   
    106.           }  
    posted @ 2013-03-06 21:03 Alter 閱讀(134) | 評論 (0)編輯 收藏

    C#程序脫離.net框架的多種方法與應用 [轉]

    本文介紹的是C#編寫的winform程序脫離.net框架的方法。【也支持VB.NET和C++.NET】

    原文地址:http://hi.baidu.com/44498/blog/item/dabd37166a11bd10962b437d.html


    很多朋友會問,為何選擇C#   ?其實原因很簡單,因為它具有其他任何語言都不具備的生產力。

    軟件工程的發展,主要目的也就是提高生產力,這個核心不變,我們的學習方向也就不變。

    本文代碼示例支持.NET FRAMEWORK 2.0 ,3.0 , 3.5 ,LINQ等先進的解決方案。

    一看就懂,一學就會,一目了然。。。

    以下所有例子,均經過測試,在2k,xp,2003,vista,2008,Win7下都是可以運行的。也包括X86和X64平臺。

     

    聲明:本文講解的是解決方案,并不提供下載【主要是沒有穩定的網盤】,

     

     

    ---------------------------------------------------------

     

     

    1, .Net Linker :中國移動的飛信就利用了它的核心。飛信是使用C#在.NET上開發的。貴,最便宜的版本要1000多美金。【傻瓜式操作,這里不做介紹】

    2,用飛信的虛擬機來引導自己開發的.NET程序。

    3,使用mono來達到脫離.NET框架的效果,可以跨平臺。【完美支持.net2.0,以及絕大多數.NET3.5,目前已經支持WPF系列新技術了】

    ///////////////////////實驗過程/////////////////////////

    例子1:先說最簡單的,使用飛信虛擬機來試驗吧。

    【不要引用VB編寫的控件或者是類庫,因為飛信的虛擬機功能很少】

    先安裝"飛信2008 3.5版",然后打開安裝目錄,里面有個VMDotNet文件夾,里面就是.NET虛擬環境相關文件了,找到飛信安裝目錄下的"VMDotNet\v2.0.50727\FetionVM.exe"來啟動運行我們的.NET WinForm程序:

    【可以使用命令行來傳值也可以用其他方式,都是一樣的】例如:

    WinExec("FetionVM.exe 我的程序.exe", SW_SHOW);     //C++ code

    為了方便,我們可以編寫一個檢測.net框架版本的程序作為引導程序,如果已經安裝了.net框架就不用虛擬機,如果沒有安裝,調用虛擬器來啟動程序。【請不要使用C#或者其他托管類型的語言來編寫這個引導程序,否則失去了意義】。

    很容易吧?但是有個弊端,你的.NET程序如果要操作類似于SQL SERVER2000,2005,2008 或者是MYSQL,Oracle,DB2等數據庫,用這個飛信自帶的虛擬機實現就比較麻煩,所以這個飛信的虛擬機只能做簡單的程序應用。還有一點大家要注意,使用飛信的虛擬機,涉及到的還有版權問題。測試一下,壓縮以后文件大概是6,7M左右,還行。

    例子2:使用MONO來脫離框架并且跨平臺。注:測試結果顯示,使用MONO啟動.NET程序速度是最快的。

    首先到MONO的官方網站下載源代碼或者最新版本,然后安裝,我用的是2.2版本【目前已經有2.4版本了,比較新,支持的更多】。

    為了方便各位朋友試驗,我提供我本次試驗的MONO版本2.2 :

    下載地址:

    安裝完畢,打開目錄,找到兩個子目錄,名字分別是bin,lib ,然后復制到另外一個目錄里面去【因為安裝的時候默認安裝在C盤的】然后把你的.net開發的程序也復制到這個目錄里面去;假設這個目錄名字叫做VM,那么你的這個文件夾里應該有個最少三個文件,一個是bin文件夾,一個是lib文件夾,還有一個就是你寫的.net程序了。

    然后可以用C++編寫一個引導程序用來調用你的.NET程序;貼個簡單的代碼吧:

    int main()
    {
    WinExec("bin\\mono.exe 你的應用程序.exe",SW_SHOWNORMAL);
    return 0;
    }
    當然,為了方便,你可以自己在邏輯里面判斷一下,機器里安裝的是.NET的哪個版本?如果版本低了,就調用MONO來執行,如果匹配,就不調用MONO了。

    【這個例子只是支持簡單的WINFORM和數據庫訪問,WEBSERVICE的,在文章末尾】

    如果按照我說的一路操作,肯定是可以運行的了,但是你會發現,現在你的.NET程序是一個綠色軟件,但是他所在的目錄下lib,或者是bin文件夾的大小是非常恐怖的。。。有300M以上的大小,這豈不是和我們的想法沖突了?當然不是;我們來精簡目錄吧:

    在bin目錄下,保留以下文件,其他的刪除即可

    然后打開lib文件夾,在2.0文件夾下保留Accessibility.dll,mscorlib.dll,mscorlib.dll.mdb,然后在GAC文件夾里面保留以下文件夾【下圖中的類庫全部保留,最好不要刪除】:

    這樣,整個目錄就精簡的差不多了,當然,你可以根據自己的需要定制需要的各種類庫。然后打包即可,以我本人機器為例,壓縮后的文件是9.8M,比.NET 2.0的框架小了很多,但是比飛信的那個虛擬機還是大了一些;換個角度來看,用mono不涉及版權問題,也可以調用各種數據庫,我本機測試操作的是SQL SERVER 2005數據庫,一切正常。讓你的.NET程序也跨平臺吧!只有MONO能做到這一點。

    本文原創,抄襲的別太過分哦,最起碼也專業點,別圖片都不貼就發布,

    耽誤別人學習,那才是最大的犯罪。。。

    例子3:使用.Net Linker 的一個老版本來測試的

    通過命令行來提取.net環境的一些類庫文件,然后模擬,不知道飛信用的是哪個版本,反正我這個老版本是不太好用,要手動精簡目錄的。

    但是唯一的好處就是兼容性比較好,而且不限制數據庫的使用。這個也涉及到版權問題,就不啰嗦了。

    精簡后的文件大小是8.66M,一般的應用都可以滿足了,呵呵。

    好了,時間不早了,睡覺了。歡迎大家留言,提出各種不同的見解。

    更新:2009年3月30日

    抽空拿到了.Net Linker 的破解版,用了一下還是不錯的,穩定性很好,兼容多種數據庫。美中不足的是有了MONO的比較,用.net linker虛擬機以后,程序啟動的時候速度稍微慢了一點,和飛信的啟動速度一樣。。。不過這也沒辦法,忍了。

    更新:2009年4月14日 支持web service

    今天看到一個朋友咨詢MONO平臺上調用webservice的問題;事實上,MONO是完全支持web service的     ;我這里也做個示例吧。

    新建一個項目,winform的,版本是.net2.0;然后添加一個引用,引用我們準備好的web服務。

    引用的url:http://www.ayandy.com/, 這個web服務的功能是天氣預報那種的,包括國內外400多個主要城市。【如果圖片不清晰,可以保存到本地然后查看。】

    然后,引用好了,就調用吧~    我這里例子顯示的是北京當天的天氣。

    然后運行程序:

    我的機器上有.net 3.5,當然沒問題,但是我們要是在其他機器上呢?

    切換到虛擬機里,虛擬機是xp sp2,沒有安裝.NET任何版本的框架;

    把程序復制到mono的目錄中,運行之。。。

    可以看到,沒有任何問題。。。這里用的MONO版本是2.2,支持的很好。

    大家可以看到,整個winform程序的按鈕,字體樣式都做了改變,

    因為MONO是在LINUX上的解決方案,沒有使用微軟默認的字體和樣式。

     

    本文偶爾更新,更新時間不確定。感謝大家的關注。。。

    有問題可以留言。。。下一篇日志《使用托管C++【c++.net】脫離.NET框架實戰》

    2009.04.23 更新:

    關于有些朋友提出,MONO到底支持多少種數據庫的問題,其實MONO支持的數據庫絕對比我們想象的多,幾乎是很多我們都沒有用過的。。。好了,我給個清單,讓大家心里有數。最近上網少,資料也沒怎么查,就先拿個05年的文章參考一下吧。

    Mono Supported Database Access- -
                                          

    Mono has many ADO.NET Data Providers to get you connected.

    Providers for Open Source databases:

    PostgreSQL: Npgsql is fully managed provider for PostgreSQL and is actively maintained

    SQL Lite: actively maintained. Requires sqlite library.

    Firebird Interbase: fully managed provider for Firebird and is actively maintained.

    MySQL: use the MySQL Connector/Net from MySQL AB which is fully managed and actively maintained by MySQL AB, but it is not included with Mono. There is the ByteFX.Data.MySqlClient provider which is not actively maintained, but it is included with Mono.


    Providers for commercial databases:

    IBM DB2 Universal Database Requires DB2 client software

    ODBC requires ODBC software which is available for Unix and Windows

    Oracle requires client software including Oracle Call Interface

    OLE DB Requires libgda (http://www.gnome-db.org/) System.Data.OleDb is not actively maintained plus it only works on Linux with GNOME 2.x

    Microsoft SQL Server fully managed provider which is actively maintained for Microsoft SQL Server 7.0/2000/2005 databases

    Sybase fully managed provider for Sybase 12.x databases and is actively maintained

    Older Microsoft SQL Server and Sybase databases Not actively maintained.


    Alternative to ADO.NET is GdaSharp (Gnome Data Access)

    Gnome Data Access (http://www.gnome-db.org/) GdaSharp is C# bindings to GDA (GNOME Data Access) and is included with GtkSharp (http://www.mono-project.com/GtkSharp), but it requires libgda be installed. Works only on Linux with GNOME 2.x installed.

    External Projects that have created ADO.NET Providers that work on Mono:

    MySQL Connector/Net from MySQL AB (http://dev.mysql.com/downloads/connector/net/) is the .NET and Mono data provider for MySQL

    ByteFX.Data.MySqlClient (http://sourceforge.net/projects/mysqlnet/) is a MySQL Managed data provider. ByteFX.Data is no longer actively developed, but it is included with Mono. Please use the MySQL Connector/Net provider from MySQL AB instead.

    NPgsql (http://gborg.postgresql.org/project/npgsql/projdisplay.php) is a fully managed provider for PostgreSQL and is included with Mono.

    Firebird (http://sourceforge.net/projects/firebird/) fully managed provider for Firebird databases and is included with Mono.

    Advanced Data Provider (http://advanced-ado.sourceforge.net/) ADP, is a transparent factory for ADO.NET which loads providers dynamically.

    Other Projects

    DB40 (http://www.mono-project.com/DB4O) Open source object database for C#

    2009.05.27 更新

    要注意的是,在X86下編譯的程序,如果選擇ANYCPU,那么提取后的程序可以在X64下運行。

    但是,如果是編譯的時候選擇X64,那就無法通過LINKER提取。

    posted @ 2012-12-01 03:49 Alter 閱讀(841) | 評論 (0)編輯 收藏
    主站蜘蛛池模板: 国产高清免费在线| 日本特黄特色aa大片免费| 中文字幕精品无码亚洲字| 污网站免费在线观看| 免费人成网站在线高清 | 久久精品九九亚洲精品| 久章草在线精品视频免费观看| 亚洲成a人片在线观看日本| 最近国语视频在线观看免费播放| 国产亚洲精品影视在线产品| 中文字幕无码日韩专区免费| 久久夜色精品国产嚕嚕亚洲av| 久爱免费观看在线网站| 亚洲一卡2卡3卡4卡国产网站| 成人免费视频网址| 羞羞漫画登录页面免费| 久久精品国产亚洲AV不卡| 国产午夜免费高清久久影院| 亚洲第一页在线视频| 成年女人男人免费视频播放| 日韩一区二区三区免费播放| 色噜噜亚洲精品中文字幕| 男女午夜24式免费视频| 亚洲Av无码一区二区二三区| 国产成人免费永久播放视频平台 | 亚洲国产精品国自产电影| 亚洲大片免费观看| 亚洲国产精品精华液| 国产精品亚洲不卡一区二区三区 | 热99re久久精品精品免费| 成年网在线观看免费观看网址| 亚洲综合色婷婷七月丁香| 亚洲高清免费在线观看| 色五月五月丁香亚洲综合网| 亚洲人成无码网站| 国产乱子精品免费视观看片| 四虎一区二区成人免费影院网址 | 免费观看无遮挡www的小视频| 美女露隐私全部免费直播| 国产亚洲成av人片在线观看| 最近免费中文字幕大全视频|