A. mysql連接池怎樣使用事務自動回收
var mysql = require('mysql'), Connection = require('mysql/lib/Connection.js');var pool = mysql.createPool({ host: '127.0.0.1', database: 'myDB', port: 3306, user: 'root', password: 'root', debug: false, connectionLimit: 3});var execPool = function() { pool.getConnection(function(err, conn) { transAutoRelease(conn); conn.beginTransaction(function(err) { if (err) throw err; conn.query("INSERT INTO test(id,name,date,test) values(1,'123',now(),1)", function(err, ret) { if (err) { console.error(err); conn.rollback(function() {}); } else { console.log(ret); conn.query('UPDATE test set id=12321312 where id=1', function(err, ret) { if (err) { console.error(err); conn.rollback(function() { }); } else { conn.commit(function() { console.log('success' + JSON.stringify(ret)); }); } }); } }); }); });}function after(fn, cb) { return function() { fn.apply(this, arguments); cb(); }}function transAutoRelease(conn) { if (conn.commit == Connection.prototype.commit) conn.commit = after(conn.commit, release); if (conn.rollback == Connection.prototype.rollback) conn.rollback = after(conn.rollback, release); function release() { if (conn) { conn.release(); } }}var intervalStartProcess = function() { setInterval(function() { execPool(); }, 1000);}for (var i = 5 - 1; i >= 0; i--) { intervalStartProcess();}
B. proxool連接池回收連接問題。
你好,需要看你的銷毀參數。close只是有連接關閉,放回連接池。需要參數houseKeepingSleepTime的定時去檢查,檢查到空閑的連接。通過maximumActiveTime連接最大活動時間,如果連接的活動大於這個數值,連接就會kill. 然後,連接不能是單例模式和單例模式的全局變數。數據源可以作為全局單例模式。
你可以從監控頁面查看一下。
C. oracle 從連接池中取了連接一直未提交,連接會放回連接池嗎
會的。連接會被oracle的機制 給回收掉。
D. asp.net網站 如果設置iis連接池強制回收,會不會影響網站計數器訪問量變化,因為我們網站的訪問量總是變化
這取決於你們的網站計數是放在哪裡了,如果是放在資料庫里或者寫入在文件里,那沒問題,如果你們把計數放在Cache或者Application里,那iis回收或者重啟後計數就會重置。
E. 一般連接池是怎麼處理mysql自動回收長時間
MYSQL不會回收,但會把長期不使用的連接斷開,這個可以通過設置MYSQL的參數connect_timeout,wait_timeout來實現。
F. 連接池有那幾種 分別有什麼區別
在講解連接池之前,先弄懂以下幾個概念:
數據源:Data source , 讀取數據的來源,也就是說你的系統要讀取的數據去什麼地方找(存放數據的地方)!
JDBC:全稱為Java DataBase Connectivity standard, 它是一個面向對象的應用程序介面(API), 通過它可訪問各類關系資料庫。
兩者之間的關系: 數據源並不等於連接池,數據源不是必須要求實現連接池的,即連接池是數據源的一種.
c3p0: hibernate.cfg.xml中配置
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN" "http://hibernate.sourceforge.net/hibernate-configuration- 3.0.dtd">
<hibernate-configuration>
<session-factory >
<!--JDBC驅動程序-->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<!-- 連接資料庫的URL-->
<property name="connection.url"> jdbc:mysql://localhost:3306/application_context </property>
<property name="connection.useUnicode">true</property>
<property name="connection.characterEncoding">UTF-8</property>
<!--連接的登錄名--> <property name="connection.username">root</property>
<!--登錄密碼-->
<property name="connection.password">paul</property>
<!-- C3P0連接池設定-->
<property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
<!-- 最大連接數 -->
<property name="hibernate.c3p0.max_size">20</property>
<!-- 最小連接數 -->
<property name="hibernate.c3p0.min_size">5</property>
<!-- 獲得連接的超時時間,如果超過這個時間,會拋出異常,單位毫秒 -->
<property name="hibernate.c3p0.timeout">120</property>
<!-- 最大的PreparedStatement的數量 -->
<property name="hibernate.c3p0.max_statements">100</property>
<!-- 每隔120秒檢查連接池裡的空閑連接 ,單位是秒-->
<property name="hibernate.c3p0.idle_test_period">120</property>
<!-- 當連接池裡面的連接用完的時候,C3P0一下獲取的新的連接數 -->
<property name="hibernate.c3p0.acquire_increment">2</property>
<!--其它配置-->
……
</session-factory>
</hibernate-configuration>
dbcp: hibernate.cfg.xml中配置
<property name="dbcp.maxActive">100</property>
<property name="dbcp.whenExhaustedAction">1</property>
<property name="dbcp.maxWait">60000</property>
<property name="dbcp.maxIdle">10</property>
<property name="dbcp.ps.maxActive">100</property>
<property name="dbcp.ps.whenExhaustedAction">1</property>
<property name="dbcp.ps.maxWait">60000</property>
<property name="dbcp.ps.maxIdle">10</property>
proxool: hibernate.cfg.xml中配置 先寫proxool的配置文件,文件名:proxool.xml(一般放在與hibernate.cfg.xml文件在同一個目錄中) <?xml version="1.0" encoding="UTF-8"?>
<!-- the proxool configuration can be embedded within your own application's. Anything outside the "proxool" tag is ignored. -->
<something-else-entirely>
<proxool>
<!--連接池的別名-->
<alias>DBPool</alias>
<!--proxool只能管理由自己產生的連接-->
<driver-url>jdbc:mysql://localhost:3306/application_context?useUnicode=true&characterEncoding=UTF8</driver-url>
<!?JDBC驅動程序-->
<driver-class>com.mysql.jdbc.Driver</driver-class>
<driver-properties>
<property name="user" value="root"/>
<property name="password" value=""/>
</driver-properties>
<!-- proxool自動偵察各個連接狀態的時間間隔(毫秒),偵察到空閑的連接就馬上回收,超時的銷毀-->
<house-keeping-sleep-time>90000</house-keeping-sleep-time>
<!-- 指因未有空閑連接可以分配而在隊列中等候的最大請求數,超過這個請求數的用戶連接就不會被接受-->
<maximum-new-connections>20</maximum-new-connections>
<!-- 最少保持的空閑連接數-->
<prototype-count>5</prototype-count>
<!-- 允許最大連接數,超過了這個連接,再有請求時,就排在隊列中等候,最大的等待請求數由maximum-new-connections決定-->
<maximum-connection-count>100</maximum-connection-count> <!-- 最小連接數-->
<minimum-connection-count>10</minimum-connection-count>
</proxool>
</something-else-entirely> 配置hibernate.cfg.xml文件 <?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN" "http://hibernate.sourceforge.net/hibernate- configuration-3.0.dtd">
<hibernate-configuration>
<session-factory >
<property name="hibernate.connection.provider_class">org.hibernate.connection.ProxoolConnectionProvider</property>
<property name="hibernate.proxool.pool_alias">DBPool</property>
<property name="hibernate.proxool.xml">proxoolconf.xml</property>
</session-factory>
</hibernate-configuration>.JNDI: hibernate.cfg.xml中配置JNDI連接池,數據源已經由應用服務配置好(如Web伺服器),Hibernate需要做的只是通過JNDI名查找到此數據源。應用伺服器將連接池對外顯示為JNDI綁定數據源,它是javax.jdbc.Datasource類的一個實例。只要配置一個Hibernate文件,如: hibernate.connection.datasource=java:/comp/env/jdbc/JNDI_NAME //JNDI名
hibernate.transaction.factory_class = org.hibernate.transaction.JTATransactionFactory
hibernate.transaction.manager_loopup_class=org.hibernate.transaction.JBossTransactionManagerLookup
hibernate.dialect=org.hibernate.dialect.MySQLDialect
區別:在hibernate3.0中,已經不再支持dbcp了,hibernate的作者在hibernate.org中,明確指出在實踐中發現 dbcp有BUG,在某些種情會產生很多空連接不能釋放,所以拋棄了對dbcp的支持。proxool不少行家推薦使用.c3p0佔用資源比較大,效率也不高.
G. c#sql server 連接池多久釋放
如果用ADO.NET封裝好的 「連接」去訪問, 那麼當你執行.Close()時就會把這個連接放入GC,
如果不關閉連接,默認超時是3600秒,即1個小時後,該連接進入GC。
如果是連接池,那就是C#中實例化的一個對象, 實例會按照GC原則進行回收。就是當沒有其他實例在調用連接池實例後的一段時間, GC自動進行回收。
H. Java中資料庫連接池是如何做到,將Connection作為對象放入內存中不被回收機回收
糾正下你的說法.一個類是不會無緣無故運行的,所以談不上佔用內存,更沒有回收.你問的應該是使用一個類創建了一個對象,如何回收該對象所佔的內存空間?
例如有一個Person類,我們創建他的一個對象,一般是如下:
Person mPerson = new Person();
這個時候情況是,在棧內存中標記了一個名字叫mPerson的空間,它存儲了一個關於某塊內存區域位置的信息,說白了,就是你使用new Person();創建出來的對象的位置,我們稱mPerson為Person對象的一個引用。這個對象位於堆內存,它是有默認值的,必須占內存一部分空間,想使用的時候,可以通過mPerson找到它。當你把mPerson賦值為null後,你那個對象就沒有引用了,這個時候,你的JVM會在適當的時候自動去回收掉Person的對象。
I. 修改資料庫上傳替換後為什麼要回收進程池
access資料庫類似"嵌入式"的資料庫,創建連接時是直接指定access文件。而asp.net默認是有連接池管理到資料庫的連接的。
當你的access資料庫上傳之後,access文件被外部修改了。所以,在asp.net(或asp)中舊的連接失效了,這時如果使用連接池中舊的連接將會發生異常(連接的目標沒了);而有時沒有問題,則是連接時使用的並不是連接池中舊有的連接,而是連接池中重新分配的鏈接,能正常指向更新後的資料庫文件,故不會發生異常。
在Access文件文件更新後,回收進程池將會同時回收資料庫的連接池,從而保證了連接池中獲取的都是新資料庫文件的連接,這樣不會有問題。
J. weblogic 如何進行連接回收
一、gc回收 web應用 → 連接池回收
weblogic jconnector Garbage Collector Method:(wls api)
WebLogic Server automatically detects connection leaks by leveraging its Java Virtual Machine
(JVM) garbage collector mechanism. When an application component terminates and the
connections it uses become dereferenced, the garbage collector calls the connection object』s
finalize() method.
When the garbage collector calls the finalize() method, if WebLogic Server determines the
application component has not closed the connection, the server automatically closes the
connection by calling the resource adapter』s ManagedConnection.cleanup() method;
WebLogic Server behaves as it would had it received a CONNECTION_CLOSED event upon proper
closure of the application component connection.
通過JVM垃圾回收機制,wls伺服器能自發探測連接泄露,當應用終止而其所使用的連接變為孤兒時,
垃圾回收器就調用連接對象的finalize方法
垃圾回收器調用finalize方法時,如果wls伺服器確定是應用沒有關閉連接,
wls伺服器將調用資源適配器的ManagedConnection的cleanup方法自動關閉連接,
weblogic伺服器表現得就像它本來應該接收 應用組件連接的其中某個連接上的一個CONNECTION_CLOSED事件
二、程序顯式回收 web應用→連接池
Connection.close()方法調用後,weblogic監控到該動作,由連接池回收並管理連接
三、weblogic的無效鏈接回收
inactive connection timeout 經過設定時間,回收無效鏈接
四、weblogic的連接池自動收縮
Allow Shrinking: 允許自動收縮。如果連接池的初始容量和最大容量不相等,那麼當池中的連接大於初始容量時,經過Shrink Frequency時間,如果連接池中的活動連接不高於初始容量個,那麼連接池中連接的數量會減少到初始容量大。