ï»??xml version="1.0" encoding="utf-8" standalone="yes"?>国产欧美日韩视频在线,美女诱惑一区,日韩综合一区http://www.aygfsteel.com/DLevin/category/53969.htmlIn general the OO style is to use a lot of little objects with a lot of little methods that give us a lot of plug points for overriding and variation. To do is to be -Nietzsche, To bei is to do -Kant, Do be do be do -Sinatrazh-cnWed, 11 Nov 2015 12:34:49 GMTWed, 11 Nov 2015 12:34:49 GMT60使用NamedParameterJdbcTemplate遇到无法使用的坑http://www.aygfsteel.com/DLevin/archive/2015/11/11/428149.htmlDLevinDLevinWed, 11 Nov 2015 10:46:00 GMThttp://www.aygfsteel.com/DLevin/archive/2015/11/11/428149.htmlhttp://www.aygfsteel.com/DLevin/comments/428149.htmlhttp://www.aygfsteel.com/DLevin/archive/2015/11/11/428149.html#Feedback0http://www.aygfsteel.com/DLevin/comments/commentRss/428149.htmlhttp://www.aygfsteel.com/DLevin/services/trackbacks/428149.html最˜q‘一直在捣鼓HBase的项目,之前写了一些代码从数据库加载数据到HBaseåQŒæ‰€æœ‰çš„代码都跑得好好地åQŒç„¶è€Œä»Šå¤©å°è¯•着换了一个数据库åQŒå°±è·‘不通了。通过数据工具åQŒå¯ä»¥å‘现连接没有问题,而且有部分逻辑很顺利通过了,然而有一些就是卡ä¸ÖMº†åQŒé€šè¿‡jstack打印出来的信息可以找到这æ ïL(f¨¥ng)š„堆栈åQ?/span>
"runner{object-loader#292}-objecthandler" #323 prio=5 os_prio=0 tid=0x00002aaadc5ec800 nid=0x7f62 in Object.wait() [0x0000000056ce4000]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        at java.lang.Object.wait(Object.java:502)
        at org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:1104)
        - locked <0x00000007736013e8> (a org.apache.commons.pool.impl.GenericObjectPool$Latch)
        at org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:106)
        at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044)
        at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:111)
        at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:77)
所以开始我怀疑是˜qžæŽ¥çš„问题,从网上也扑ֈ°äº†ä¸€ä¸ªç±»åž‹çš„现象åQŒæœ‰äººæ€€ç–‘是DBPC的一个bug坯D‡´æ­»é”åQšhttp://stackoverflow.com/questions/5714511/deadlock-issue-in-dbcp-deployed-on-tomcatåQŒæ‰€ä»¥æˆ‘升çñ”了DBCP版本1.4åQŒç„¶è€Œå’Œ˜q™äh一æ ïL(f¨¥ng)š„¾l“æžœåQŒå‡¾U§DBCP版本òq¶æ²¡æœ‰è§£å†³é—®é¢˜ã€‚简单的看DBCPçš„ä»£ç ï¼Œéƒ½å¼€å§‹æ€€ç–‘æ˜¯ä¸æ˜¯å› äØ“æ²¡æœ‰Spring JdbcTemplate没有正确的把Connection˜q”回回去引è“v泄漏了,然而也有点感觉不太可能åQŒå› ä¸ø™¿™ŒDµä»£ç åœ¨å…¶ä»–数据库都跑得好好圎ͼŒä½†æ˜¯æˆ‘们的数据库版本都是一致的åQŒç„¶è€Œå…¶ä»–配¾|®ä¸Šä¹Ÿè¢«å‡è®¾ä¸€è‡´äº†åQˆè¢«å¿½ç•¥çš„一个重要的点)ã€?br />
后来开始调配置åQŒå‡ž®‘连接数åQŒå‡ž®‘线½E‹æ•°åQŒç»˜q‡å„¿Uç»„合,发现当把DBè¯Èš„batch降到1的时候就可以work了,非常诡异的一个问题。从数据工具中查刎ͼŒå¦‚果用batchåQŒå¾—到的SQLæ˜?
SELECT <column>, <column> FROM <table> where iid in (@p0, @p1)
如果是batchæ˜?的话åQ?br />
SELECT <column>, <column> FROM <table> where iid in (@p0)
˜q™æ®µSQL语句是这么äñ”生的åQ?br />
DataSource dataSource = ....
this.jdbc = new NamedParameterJdbcTemplate(dataSource);
...
MapSqlParameterSource parameters = new MapSqlParameterSource();
parameters.addValue("params", paramsMap.keySet());
jdbc.query("SELECT <columns> FROM <table> where <column> in (:params)";, parameters, new ResultSetExtractor<Void>() {
....
})

如果是一个batch的话åQŒåœ¨jstack堆栈中可以看到它一直在½{‰æ•°æ®åº“的返回结果:
"runner{object-loader#16}-objecthandler" #47 prio=5 os_prio=0 tid=0x0000000006ddd800 nid=0x2694 runnable [0x0000000045434000]
   java.lang.Thread.State: RUNNABLE
        at java.net.SocketInputStream.socketRead0(Native Method)
        at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
        at java.net.SocketInputStream.read(SocketInputStream.java:170)
        at java.net.SocketInputStream.read(SocketInputStream.java:141)
        at com.sybase.jdbc3.timedio.RawDbio.reallyRead(Unknown Source)
        at com.sybase.jdbc3.timedio.Dbio.doRead(Unknown Source)
        at com.sybase.jdbc3.timedio.InStreamMgr.a(Unknown Source)
        at com.sybase.jdbc3.timedio.InStreamMgr.doRead(Unknown Source)
        at com.sybase.jdbc3.tds.TdsProtocolContext.getChunk(Unknown Source)
˜q™ä¹Ÿè§£é‡Šäº†ç¬¬ä¸€ä¸ªå †æ ˆä¸€ç›´åœåœ¨borrowObject(getConnection)的阶ŒDµï¼Œå› äؓ之前所有的Connection都在数据库堵住没有返回,所以这个线½E‹å†æ‹¿Connection的时候超˜q‡äº†æˆ‘设¾|®çš„æœ€å¤§Connection敎ͼŒæ‰€ä»¥å°±½{‰ç€æ‹¿ä¸åˆ°Connectionã€?br />
在后来查了一下不同数据库的JDBC Driver信息(sp_version):
jConnect (TM) for JDBC(TM)/7.07 ESD #4 (Build 26793)/P/EBF20302/JDK 1.6.0/jdbcmain/OPT/Thu Jul  5 22:08:44 PDT 2012
jConnect (TM) for JDBC(TM)/1000/Wed Mar 11 05:01:24 2015 PDT

也就是说˜q™ç§ç”¨æ³•是因为旧的JDBC Driver对NamedParameterJdbcTemplate不完善引èµïL(f¨¥ng)š„åQŒè¿™ä¸ªå‘èŠ×ƒº†æˆ‘一整天的时间。。。ã€?img src ="http://www.aygfsteel.com/DLevin/aggbug/428149.html" width = "1" height = "1" />

]]>
[转]MySQL索引背后的数据结构及½Ž—法原理http://www.aygfsteel.com/DLevin/archive/2014/07/21/416059.htmlDLevinDLevinMon, 21 Jul 2014 14:10:00 GMThttp://www.aygfsteel.com/DLevin/archive/2014/07/21/416059.htmlhttp://www.aygfsteel.com/DLevin/comments/416059.htmlhttp://www.aygfsteel.com/DLevin/archive/2014/07/21/416059.html#Feedback0http://www.aygfsteel.com/DLevin/comments/commentRss/416059.htmlhttp://www.aygfsteel.com/DLevin/services/trackbacks/416059.html阅读全文

DLevin 2014-07-21 22:10 发表评论
]]>
Transaction中SQL的顺序引èµïL(f¨¥ng)š„æ­»é”http://www.aygfsteel.com/DLevin/archive/2013/10/17/405069.htmlDLevinDLevinThu, 17 Oct 2013 12:49:00 GMThttp://www.aygfsteel.com/DLevin/archive/2013/10/17/405069.htmlhttp://www.aygfsteel.com/DLevin/comments/405069.htmlhttp://www.aygfsteel.com/DLevin/archive/2013/10/17/405069.html#Feedback1http://www.aygfsteel.com/DLevin/comments/commentRss/405069.htmlhttp://www.aygfsteel.com/DLevin/services/trackbacks/405069.html
问题描述åQ?/strong>
如以下两条非常简单的SQL语句åQŒå®ƒä»¬å…±åŒç»„成了一个TransactionåQŒé‚£ä¹ˆåœ¨å¤šçº¿½E‹é«˜é¢‘率执行时就会引èµäh­»é”é—®é¢˜ï¼ˆå½“ç„¶˜q™é‡Œè¦è€ƒè™‘锁的¾U§åˆ«é—®é¢˜åQŒä¸€èˆ¬å¤š¾cÖM¼¼˜q™ç§¾pȝ»Ÿéƒ½ä¼šé€‰æ‹©è¡Œé”åQŒé‚£ä¹ˆä»¥ä¸‹å¼•èµäh­»é”çš„æ¡äšg是两条语句都对同一行操作)åQ?
select <column1> from <table> where <column2> = ? 
update <table> set <column1> = %d where <column2> = '%s'

问题分析åQ?/strong>
select语句需è¦?#8220;Shared Lock”åQŒå› è€Œå¤šä¸ªçº¿½E‹å¯ä»¥åŒæ—¶è¿›å…¥ï¼Œè€Œupdate需è¦?#8220;Exclusive Lock”åQŒå½“两个¾U¿ç¨‹åŒæ—¶æ‰§è¡Œäº†select语句åQŒè€ŒèŽ·å¾—äº†“Shared Lock”åQŒè€Œä»–们在接下来执行update语句æ—Óž¼Œéƒ½éœ€è¦èŽ·å¾?#8220;Exclusive Lock”而äñ”ç”Ÿç«žäº‰ï¼Œå¯ÆD‡´æ­»é”ã€?br />
解决æ–ÒŽ(gu¨©)¡ˆ1:
互换他们的顺序,˜q™æ ·åQŒåœ¨½W¬ä¸€‹Æ¡æ‰§è¡Œupdate语句æ—Óž¼Œä»–们会竞äº?Exclusive Lock"而引èµäh²¡æœ‰å¾—åˆ?#8220;Exclusive Lock”的线½E‹ç­‰å¾…:
1, update <table> set <column2> = <column2> + <some value> where <column1> = '%s' 
2. select <column1> from <table> where <column2> = ? 
3. <column1> - <some value> to get the old <column1> value.

解决æ–ÒŽ(gu¨©)¡ˆ2åQ?/strong>
采用“Hold Lock”方式åQŒå³åœ¨æ‰€æœ‰æ“ä½œä¹‹å‰åšä¸€ä¸ªdummyçš„update操作åQŒè¿™æ ·å¯ä»¥ä¿è¯åœ¨˜q›Transaction之前需要先获得一ä¸?#8220;Exclusive Lock”

 



]]>
Ö÷Õ¾Ö©Öë³ØÄ£°å£º Îâ±¤ÏØ| ÍòÉ½ÌØÇø| ãäÁêÏØ| »ª°²ÏØ| ÃÅÍ·¹µÇø| µÂ²ýÏØ| Î÷ÄþÊÐ| ÓݳÇÏØ| ¾¸Ô¶ÏØ| °²ÔÀÏØ| °üÍ·ÊÐ| ½¨ÑôÊÐ| ÈéɽÊÐ| ÄÇÆÂÏØ| ÓÀÊ¤ÏØ| ÌïÁÖÏØ| Ë«°ØÏØ| ƽ¹ûÏØ| ÎäÒÄɽÊÐ| ºÓÄÏÊ¡| ´ïÀ­ÌØÆì| ±¾ÏªÊÐ| ÈÊÊÙÏØ| ¼ÎÒñÏØ| ÎÂÈªÏØ| ÆÕÀ¼ÏØ| ²ÔÄÏÏØ| Î÷ÇàÇø| ·áË³ÏØ| Í¼Ä¾Êæ¿ËÊÐ| Õã½­Ê¡| ÎÚ³ľÆëÊÐ| ³ÉÎäÏØ| ¶ÑÁúµÂÇìÏØ| ÁÙ°²ÊÐ| ʯÃÅÏØ| ÄÏÐÛÊÐ| ¸£¹±ÏØ| ÀàÎÚÆëÏØ| ¶«Ïç| Æô¶«ÊÐ|