① 如何釋放sql server佔用的資源內存
sql server 在查詢大數據量的數據時,總會佔用大量的內存,並且居高不下,一不小心就會死機。
下面這個是我從網上找到的:
當你查詢數據的數據量比較大時,sqlserver會把查詢結果緩存在內存中,保證你下次查詢同樣的記錄時會很快得到結果,所以內存使用量會激增。
在你完成此次查詢後,sqlserver不會馬上釋放內存,數據會仍然放在內存中,這是sqlserver的優化策略,sqlserver會不斷地佔用你的系統內存,來加快sqlserver的運行速度,當你的系統中的其它服務也需要內存時,它才會自動釋放部分內存。一句話,sqlserver不會讓你的系統有閑置的內存,除非你設置sqlserver的最大內存使用量。這樣也沒什麼不好,如果你的系統很大,單獨給sqlserver一台機器,這樣會提高它的性能。
如果你只是開發用,要想讓sqlserver釋放內存,重啟sqlserver的服務就行了。如果不想讓sqlserver佔用太多內存,設置sqlserver的最大內存佔用量.
② sql sever 2012如何釋放磁碟空間
釋放方法:
1.打開sqlserver管理工具,選中需要操作的資料庫——右鍵——任務——分離;
勾選刪除鏈接(如果有鏈接連著資料庫會導致分離失敗)然後點擊確定
2.這時候你會發現你的資料庫不見了,不要著急,一會兒就弄回來,先去我的電腦-文件管理 把萬惡之源 ldf文件刪除了
3.然後回到管理工具 附加上剛才分離的庫文件 一般是 ndf 或者mdf後綴的
4.選擇後下面會有兩個文件 如果你刪了ldf 會提示日誌文件找不到 把那一項刪了 點確定就是 再去刪一遍日誌文件 我就不截圖了
附加完畢是不是發現 我的資料庫又回來了 整個過程都不需要重啟資料庫
如果想要直接釋放也可以,但是前提是你需要知道文件的名字,直接執行語句
DBCC SHRINKFILE(『FileName』, 1 , TRUNCATEONLY )
也可以直接釋放。
具體函數 DBCC SHRINKFILE的參數定義,大家可以自己在網上查詢。
③ c#:和sql資料庫相關的操作,哪些類是像SqlConnection這樣創建對象後需要釋放資源的
一般是非託管資源需要釋放,實踐中通常有資料庫連接配缺掘、文件句柄、窗口句柄等。參考下面培核的扮棗
http://msdn.microsoft.com/zh-cn/library/system.idisposable(v=vs.110).aspx
④ 釋放資料庫連接 引用次數 為什麼
資源池(resource pool)。該模式正是為解決資源頻繁分配、釋放所造成的問題。資料庫連接池的基本思想就是為資料庫連接建立一個「緩沖池」。預先在緩沖池中放入一定數量的連接,當需要建立資料庫連接時,只需要從緩沖池中取出一個了,使用完畢後再放回去。我們可以通過設定連接池最大數來防止系統無盡的與資料庫連接。更為重要的是我們可以通過連接池的管理機制監視資料庫連接使用數量,使用情況,為系統開發,測試以及性能調整提供依據。
連接池的相關問題分析:
1、並發問題。
為了使連接管理服務具有最大的通用性,必須考慮多線程環境,並發問題。這個問題相對比較好解決,因為各個語言自身提供了並發管理的支持,比如java c#等,使用synchronized(java) lock(c#)等關鍵字確保線程同步。
2、事務管理。
我們知道,事務具有原子性,此時要求對資料庫操作符合「ALL-ALL-NOTHING」原則,即對於一組sql語句要麼全做,要麼全不做。我們知道當兩個線程共用一個連接connection對象時,而且各自都有自己的事務要處理時,對於連接池是一個很頭疼的問題,因為即使connection類提供了相應的事務支持,可是我們仍然不能確定那個資料庫操作對應那個事務。知識由於我們的兩個線程都在進行事務操作。為此我們可以使用每一個事物獨佔一個連接來實現,雖然這種方法有點浪費連接池資源但是可以大大降低事務管理的復雜性。
3、連接池的分配與釋放
連接池的分配與釋放,對系統的性能有很大的影響。合理的分配與釋放,可以提高連接的復用度,從而降低建立新連接的開銷,同時還可以加快用戶的訪問速度。
對於連接的管理可使用一個List。即把已經創建的連接都放入List中去統一管理。每當用戶請求一個連接時,系統檢查這個List中有沒有可以分配的連接。如果有就把那個最合適的連接分配給他(如何能找到最合適的連接文章將在關鍵議題中指出);如果沒有就拋出一個異常給用戶,List中連接是否可以被分配由一個線程來專門管理捎後我會介紹這個線程的具體實現。
4、連接池的配置與維護
連接池中到底應該放置多少連接,才能使系統的性能最佳?系統可採取設置最小連接數(minConnection)和最大連接數(maxConnection)等參數來控制連接池中的連接。比方說,最小連接數是系統啟動時連接池所創建的連接數。如果創建過多,則系統啟動就慢,但創建後系統的響應速度會很快;如果創建過少,則系統啟動的很快,響應起來卻慢。這樣,可以在開發時,設置較小的最小連接數,開發起來會快,而在系統實際使用時設置較大的,因為這樣對訪問客戶來說速度會快些。最大連接數是連接池中允許連接的最大數目,具體設置多少,要看系統的訪問量,可通過軟體需求上得到。
如何確保連接池中的最小連接數呢?有動態和靜態兩種策略。動態即每隔一定時間就對連接池進行檢測,如果發現連接數量小於最小連接數,則補充相應數量的新連接,以保證連接池的正常運轉。靜態是發現空閑連接不夠時再去檢查。
引用記數
在分配、釋放策略對於有效復用連接非常重要,我們採用的方法也是採用了一個很有名的設計模式:reference counting(引用記數)。該模式在復用資源方面使用非常廣泛,我們把該方法運用到對於連接分配釋放上。每一個資料庫連接,保留一個引用記數,用來記錄該鏈接的使用者的個數。具體實現上,我們對connection類進行了進一步包裝來實現引用記數。被包裝的connection類我們提供2個方法來實現引用記數的操作,一個是repeat(被分配出去)一個是remove(被釋放回來);然後利用repeatnow屬性來確定當前引用多少,具體是哪個用戶引用了該連接,將在連接池中登記;最後提供isRepeat屬性來確定該連接是否可以使用引用記數技術。一旦一個連接被分配出去,那麼就會對該連接的申請者進行登記,並且增加引用記數,當被釋放回來時就刪除他登記的信息,同時減少一次引用記數。這樣做的一個很大的好處是,使得我們可以高效的使用連接,因為一旦所有連接都被分配出去,我們就可以根據相應的策略從使用池中挑出一個正在使用的連接來復用,而不是隨便拿出一個連接去復用。
連接池用於創建和管理資料庫連接的緩沖技術,緩沖池中的連接可以被任何需要他們的線程使用。當一個線程需要使用JDBC對一個資料庫操作時,將從池中請求一個連接。當這個鏈接使用完畢後,將返回連接池中,等待為其他的線程服務。
連接池的主要優點:
1)減少連接的創建時間,連接池中的連接是已准備好的,可以重復使用的,獲取後可以直接訪問資料庫,因此減少了連接創建的次數和時間。
2)簡化的編程模式。當使用連接池時,每一個單獨的線程能夠像創建自己的JDBC連接一樣操作,允許用戶直接使用JDBC編程技術。
3)控制資源的使用。如果不使用連接池,每次訪問資料庫都需要創建一個連接,這樣系統的穩定性受系統的連接需求影響很大,很容易產生資源浪費和高負載異常。連接池能夠使性能最大化,將資源利用控制在一定的水平之下。連接池能控制池中的鏈接數量,增強了系統在大量用戶應用時的穩定性。
連接池的工作原理:
連接池的核心思想是連接的復用,通過建立一個資料庫連接池以及一套連接使用、分配和管理策略,使得該連接池中的連接可以得到高效,安全的復用,避免了資料庫連接頻繁建立和關閉的開銷。
連接池的工作原理主要由三部分組成,分別為連接池的建立,連接池中連接的使用管理,連接池的關閉。
第一、連接池的建立。一般在系統初始化時,連接池會根據系統配置建立,並在池中建立幾個連接對象,以便使用時能從連接池中獲取,連接池中的連接不能隨意創建和關閉,這樣避免了連接隨意建立和關閉造成的系統開銷。java中提供了很多容器類,可以方便的構建連接池,例如Vector,stack等。
第二、連接池的管理。連接池管理策略是連接池機制的核心,連接池內連接的分配和釋放對系統的性能有很大的影響。其策略是:
當客戶請求資料庫連接時,首先查看連接池中是否有空閑連接,如果存在空閑連接,則將連接分配給客戶使用;如果沒有控線連接,則查看當前所開的連接數是否已經達到最大連接數,例如如果沒有達到就重新創建一個請求的客戶;如果達到,就按設定的最大等待時間進行等待,如果超出最大等待時間,則拋出異常給客戶。
當客戶釋放資料庫連接時,先判斷該連接的引用次數是否超過了規定值,如果超過了就從連接池中刪除該連接,否則就保留為其他客戶服務。該策略保證了資料庫連接的有效復用,避免了頻繁建立釋放連接所帶來的系統資源的開銷。
第三、連接池的關閉。當應用程序退出時,關閉連接池中所有的鏈接,釋放連接池相關資源,該過程正好與創建相反。
⑤ sqlserver 怎麼釋放連接數
1、獲取SQL Server允許同時用戶連接的最大數
SELECT @@MAX_CONNECTIONS
2、獲取當前指定資料庫的連接信息
SELECT * FROM master.dbo.sysprocesses WHERE dbid IN
(
SELECT dbid FROM master.dbo.sysdatabases
WHERE NAME='YourDataBaseName'
)
--根據需要更改YourDataBaseName
SELECT * FROM master.dbo.sysprocesses WHERE DB_NAME(dbid) = 'YourDataBaseName'
3、獲取當前SQL伺服器所有的連接詳細信息
SELECT * FROM sysprocesses
以上查詢結果包含了:系統進程和用戶進程。
如果只是想查用戶進程的話則需採用下面的方法
4、獲取自上次啟動 SQL Server服務 以來連接或試圖連接的次數
SELECT @@CONNECTIONS
這個剛開始會有點誤解,認為是當前SQL Server伺服器當前所有的連接數。需要重點注意。