??xml version="1.0" encoding="utf-8" standalone="yes"?>99视频精品免费观看,久久精品成人一区二区三区蜜臀,久久综合给合久久狠狠狠97色69http://www.aygfsteel.com/neverend/archive/2012/03/31/373127.htmlneverendneverendSat, 31 Mar 2012 06:53:00 GMThttp://www.aygfsteel.com/neverend/archive/2012/03/31/373127.html从基本概念开始:
׃n?br />׃n锁的代号是SQ是Share的羃写,׃n锁的锁粒度是行或者元l(多个行)。一个事务获取了׃n锁之后,可以寚w定范围内的数据执行读操作?

排它?br />排它锁的代号是XQ是eXclusive的羃写,排它锁的_度与共享锁相同Q也是行或者元l。一个事务获取了排它锁之后,可以寚w定范围内的数据执行写操作?br />
假设有两个事务t1和t2
如果事务t1获取了一个元l的׃n锁,事务t2q可以立卌取这个元l的׃n锁,但不能立卌取这个元l的排它锁(必须{到t1释放׃n锁之后)?br />如果事务t1获取了一个元l的排它锁,事务t2不能立即获取q个元组的排׃n锁,也不能立卌取这个元l的排它锁(必须{到t1释放排它锁之后)?br /> 
意向?br />意向锁是一U表锁,锁定的粒度是整张表,分ؓ意向׃n?IS)和意向排它锁(IX)两类。意向共享锁表示一个事务有意对数据上共享锁或者排它锁?#8220;有意”q两个字表达的意思比较微妙,说的明白点就是指事务惛_q个事但q没真去qӀD例说明下意向׃n锁,比如一个事务t执行了这样一个语句:select * from table lock in share model Q如果这个语句执行成功,对表table上了一个意向共享锁。lock in share model是说事务t1在接下来要执行的语句中要获取S锁。如果t1的select * from table lock in share model执行成功Q那么接下来t1应该可以畅通无ȝL行只需要共享锁的语句了。意向排它锁的含义同理可知,上例中要获取意向排它锁,可以使用select * from table for update ?br />

lock in share model ?for updateq两?/span>东西在数据率理论中还有个学名?/span>悲观锁,与悲观锁相对的当然还有乐观锁。大家可以看到各U锁都是成双成对出现的。关于悲观锁和乐观锁的问题暂且不表,下文再来详述?

锁的互斥与兼容关p?/span>
锁和锁之间的关系Q要么是相容的,要么是互斥的?br />锁a和锁b相容是指Q操作同样一l数据时Q如果事务t1获取了锁a,另一个事务t2q可以获取锁bQ?br />锁a和锁b互斥是指Q操作同样一l数据时Q如果事务t1获取了锁aQ另一个事务t2在t1释放锁a之前无法获取锁b?br />
上面提到的共享锁、排它锁、意向共享锁、意向排它锁怺之前都是有兼?互斥关系的,可以用一个兼Ҏ矩阵表C?y表示兼容Qn表示不兼?:
    X    S    IX    IS
X  n     n    n     n
S  n     y    n     y
IX n     n    y     y
IS n     y    y     y 

兼容性矩阵ؓ什么是q个样子的?
X和S的相互关pd上文中解释过了,IX和IS的相互关pd部是兼容Q这也很好理解,因ؓ它们都只?#8220;有意”Q还处于YY阶段Q没有真qԌ所以是可以兼容的;
剩下的就是X和IXQX和IS, S和IXQ?S和IS的关pMQ我们可以由X和S的关pL导出q四l关pR?br />单的_X和IX?X和X的关pRؓ什么呢Q因Z务在获取IX锁后Q接下来有权利获取X锁。如果X和IX兼容的话Q就会出C个事务都获取了X锁的情况Q这与我们已知的X与X互斥是矛盄Q所以X与IX只能是互斥关pR其余的三组关系同理Q可用同L方式推导出来?br />
一致性非d?br />
select... lock in share mode和select ... for update的区?br />
索引记录?br />
间隙?br />
后码?br />
各种语句对应的锁cd
在有索引的情况下是以后码锁ؓ基础的行U锁Q在固定索引键查扄情况下是索引记录锁,在没有可用烦引的情况下上升到表锁
有烦引的情况Q?br />select ... from 一致性非d读,不上锁。在serializable隔离U别下例外,在这个隔ȝ别下上共享后码锁
select ... from ... lock in share mode  ׃n后码?
select ... from ... for update 排它后码?br />update .... where  排它后码?br />delete from .... where 排它后码?br />insert ... 排它索引记录锁,如果发生键值唯一性冲H则转成׃n?br />insert ... on duplicate key update Q一直都是排它锁
replace ... 一直都是排它锁


死锁情境分析

MVCC的理Z实现

neverend 2012-03-31 14:53 发表评论
]]>
MySQL查询优化http://www.aygfsteel.com/neverend/archive/2012/03/13/371770.htmlneverendneverendMon, 12 Mar 2012 23:48:00 GMThttp://www.aygfsteel.com/neverend/archive/2012/03/13/371770.htmlhttp://www.aygfsteel.com/neverend/comments/371770.htmlhttp://www.aygfsteel.com/neverend/archive/2012/03/13/371770.html#Feedback0http://www.aygfsteel.com/neverend/comments/commentRss/371770.htmlhttp://www.aygfsteel.com/neverend/services/trackbacks/371770.html高ƈ发低消?> 低ƈ发高消?br />
2. 定位性能瓉
profiling

3. 明确的优化目?br />
4. 从explain入手
y
5. 结果集驱动大结果集Q?
Join操作

6. 在烦引中完成排序

7. 只取己需要的columns
MySQL有两U排序算法,可能用只讉K一ơ数据的法?br />
8. 仅仅使用最有效的过滤条?br />索引键长度?

9. 避免复杂的join和子查询

充分利用EXPLAIN和profiling
profiling的用:
1.set profiling = 1;
2.执行SQL;
3.show profile;
4.show profile [cpu, block io] for query [id];

mysqlslap 试sql性能
mysqlslap --concurrency=5 --iterations=500 --query="selec
t * from hbe_hotel" --create-schema=phoenix -uroot -p

合理设计q用烦?br />Mysql支持的烦引类型:
1. B-tree索引 除了Archive的存储引擎都支持
2. Hash索引  memory和NDB支持
3. Full-text索引 MyISAMQ分词后建立B-tree索引
4. R-tree索引 MyISAM QGISpȝ使用

索引的利?br />利:提高数据索效率和排序、分l效?br />弊:加大更新操作的资源消耗,增加存储I间的消?br />
如何判断是否需要用烦?br />1. 使用较频J的字段应该创徏索引
2. 唯一性太差的字段不徏索引 l验|15%
3. 更新非常频繁的字D不建烦?br />4. where子句中不出现的字D不建烦?br />
单键索引q是l合索引Q?br />多方考虑Q^衡优?br />
技术h员如何证明一个需求是否合理?
1. 每次PD提出新需求的时候,要求l出该项目预期收益的量化指标?br />2. 在项目进行中Q详l记录所有资源投入,包括人力、硬件等?br />3. 目上线后收集数据统计实际收益倹{?br />4. 相关部门可能设计出目投入/产出比率的计规则,投?产出比公布给参与目的所有h员?br />5. 比较实际的投?产出比与预期|以判定项目做的是否值得?br />


neverend 2012-03-13 07:48 发表评论
]]>
MySQL执行计划http://www.aygfsteel.com/neverend/archive/2012/02/04/369381.htmlneverendneverendSat, 04 Feb 2012 10:33:00 GMThttp://www.aygfsteel.com/neverend/archive/2012/02/04/369381.htmlhttp://www.aygfsteel.com/neverend/comments/369381.htmlhttp://www.aygfsteel.com/neverend/archive/2012/02/04/369381.html#Feedback0http://www.aygfsteel.com/neverend/comments/commentRss/369381.htmlhttp://www.aygfsteel.com/neverend/services/trackbacks/369381.html
调用方式Q?br />explain select ...

explain extended select ...
show warnings 得到MySQL优化器优化后的查询语?br />
执行计划包含的信息:


说明Q?br />idQ?select子句的优先Qid大Q优先񔭑高?br />select_type: 查询cd
table: 查询的表?br />type:  MySQL扑ֈ所需行用的方式Q包括如下类型:


ALL: 扫描全表
index: 扫描全部索引?br />range: 扫描部分索引
ref: 非唯一性烦引扫?br />eq_refQ唯一性烦引扫?br />const, system: ?/span>MySQLҎ询某部分q行优化Qƈ转换Z个常量时Q用这些类型访?/span>
NULL: MySQL在优化过E中分解语句Q执行时甚至不用讉K表或索引

rows: 扑ֈ所需记录需要读取的行数
Extra: 额外信息

执行计划可用来分析select语句的性能Q排查性能瓉?br />
参考资料:
http://wenku.baidu.com/view/d4416c27aaea998fcc220ea7.html

/Files/neverend/mysqlexplain-MySQL执行计划解读.ppt

neverend 2012-02-04 18:33 发表评论
]]>
SVN代码mergehttp://www.aygfsteel.com/neverend/archive/2012/02/04/369380.htmlneverendneverendSat, 04 Feb 2012 10:13:00 GMThttp://www.aygfsteel.com/neverend/archive/2012/02/04/369380.htmlhttp://www.aygfsteel.com/neverend/comments/369380.htmlhttp://www.aygfsteel.com/neverend/archive/2012/02/04/369380.html#Feedback0http://www.aygfsteel.com/neverend/comments/commentRss/369380.htmlhttp://www.aygfsteel.com/neverend/services/trackbacks/369380.html
如何merge代码?
用命令搞mergeQ客L囑Ş界面不是很给力?br />SVN 1.5以上版本Q可以用SVN的自动合qӞ
主q合q到分支Q?br />q入分支目录Q执行命令: svn merge http://server/dir/trunk

分支合q到dQ?br />q入d目录Q执行命令: svn merge http://server/dir/branch  --reintegrate
注: 如果之前q行q主q合q到分支的操作,请加参数--reintegrateQ否则可能会有很多代码冲H出现?br />
如果是SVN1.5以下版本Q只能用手工合qӞ
q入d目录Q执行命令:svn merge -r version1:version2 http://server/dir/branch
branch上从version1到version2所做的改动合ƈCqԌvension1 < version2

q入d目录Q执行命令: svn merge -c version1 http://server/dir/branch
表示version1ơ所做的改动合ƈCq?br />
代码冲突如何解决Q?br />
conficted

tree conficted

neverend 2012-02-04 18:13 发表评论
]]>
maven依赖冲突http://www.aygfsteel.com/neverend/archive/2012/02/03/369327.htmlneverendneverendFri, 03 Feb 2012 07:51:00 GMThttp://www.aygfsteel.com/neverend/archive/2012/02/03/369327.htmlhttp://www.aygfsteel.com/neverend/comments/369327.htmlhttp://www.aygfsteel.com/neverend/archive/2012/02/03/369327.html#Feedback1http://www.aygfsteel.com/neverend/comments/commentRss/369327.htmlhttp://www.aygfsteel.com/neverend/services/trackbacks/369327.html目开发过E中l常会碰到maven依赖冲突的问题,q篇post整理下maven依赖冲突产生的原因以及解x?br />
maven依赖冲突的生是由maven传递性依赖造成的:

什么是maven传递依赖?
“一个传递性依赖就是对于一个依赖的依赖。如果project-a依赖于project-bQ而后
者接着依赖于project-cQ那么project-cp认ؓ是project-a的传递性依赖。如
果project-c依赖于project-dQ那么project-d׃被认为是project-a的传递性依
赖。Maven的部分吸引力是由于它能够理传递性依赖,q且能够帮助开发者屏蔽掉?br />t所有编译期和运行期依赖的细节。你可以只依赖于一些包如Spring FrameworkQ而不
用担心Spring Framework的所有依赖,Maven帮你自动理了,你不用自己去详细了解
配置?br />Maven是怎样完成qg事情的呢Q它建立一个依赖图Qƈ且处理一些可能发生的冲突?br />重叠。例如,如果Maven看到有两个项目依赖于同样的groupId和artifactIdQ它会自?br />整理Z用哪个依赖,选择那个最新版本的依赖。虽然这听v来很方便Q但在一些边?br />情况中,传递性依赖会造成一些配|问题。在q种情况下,你可以用依赖排除?#8221;
                                                             ——摘自《Maven权威指南?br />
什么情况下会生依赖冲H?
举例说明Q项目中的pom.xml里声明了对project-a1.0与project-b2.0的依赖,而project-a1.0又传递依赖于project-b1.0的版本?br />假设mavenl过分析之后军_使用project-b1.0的依赖,也就是打包的时候把project-b1.0.jar打进了war包?br />war包部|在java容器中启动之后,如果依赖project-b2.0.jar中新ȝcLҎQ就会发现引用的cL者方法不存在?br />q种现象是依赖冲突?br />
如何分析依赖冲突Q?br />mvn dependency:tree

冲突解决ҎQ?br />使用maven提供?lt;exclusion>标签?br />举例说明Q?br />如果你正依赖于一个类库,该类库又依赖于Sun JTA APIQ你会想要替换这个传递性依赖?br />Hibernate是一个例子。Hibernate依赖于Sun JTA APIQ而后者在中央Maven仓库中不可用Q因为它是不
能免费分发的。幸q的是,Apache Gernoimo目创徏了一些可以免费分发的独立实现
cd。ؓ了用另外的依赖来替换q个传递性依赖,你需要排除这个传递性以依赖Q然?br />在你的项目中再声明一个依赖。下面展CZq样一个替换的样例?
<dependency>
    
<groupId>org.hibernate</groupId>
    
<artifactId>hibernate</artifactId>
    
<version>3.2.5.ga</version>
    
<exclusions>
        
<exclusion>
            
<groupId>javax.transaction</groupId>
            
<artifactId>jta</artifactId>
        
</exclusion>
    
</exclusions>
</dependency>
<dependency>
    
<groupId>org.apache.geronimo.specs</groupId>
    
<artifactId>geronimo-jta_1.1_spec</artifactId>
    
<version>1.1</version>
</dependency>




neverend 2012-02-03 15:51 发表评论
]]>
MySQL死锁http://www.aygfsteel.com/neverend/archive/2012/02/01/369197.htmlneverendneverendWed, 01 Feb 2012 14:37:00 GMThttp://www.aygfsteel.com/neverend/archive/2012/02/01/369197.htmlhttp://www.aygfsteel.com/neverend/comments/369197.htmlhttp://www.aygfsteel.com/neverend/archive/2012/02/01/369197.html#Feedback0http://www.aygfsteel.com/neverend/comments/commentRss/369197.htmlhttp://www.aygfsteel.com/neverend/services/trackbacks/369197.html
死锁分析


neverend 2012-02-01 22:37 发表评论
]]>
~存技?/title><link>http://www.aygfsteel.com/neverend/archive/2012/02/01/369196.html</link><dc:creator>neverend</dc:creator><author>neverend</author><pubDate>Wed, 01 Feb 2012 14:36:00 GMT</pubDate><guid>http://www.aygfsteel.com/neverend/archive/2012/02/01/369196.html</guid><wfw:comment>http://www.aygfsteel.com/neverend/comments/369196.html</wfw:comment><comments>http://www.aygfsteel.com/neverend/archive/2012/02/01/369196.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.aygfsteel.com/neverend/comments/commentRss/369196.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/neverend/services/trackbacks/369196.html</trackback:ping><description><![CDATA[ȝ~存技?img src ="http://www.aygfsteel.com/neverend/aggbug/369196.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/neverend/" target="_blank">neverend</a> 2012-02-01 22:36 <a href="http://www.aygfsteel.com/neverend/archive/2012/02/01/369196.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux下Tomcat启动关闭理脚本http://www.aygfsteel.com/neverend/archive/2011/08/19/356907.htmlneverendneverendFri, 19 Aug 2011 15:00:00 GMThttp://www.aygfsteel.com/neverend/archive/2011/08/19/356907.htmlhttp://www.aygfsteel.com/neverend/comments/356907.htmlhttp://www.aygfsteel.com/neverend/archive/2011/08/19/356907.html#Feedback0http://www.aygfsteel.com/neverend/comments/commentRss/356907.htmlhttp://www.aygfsteel.com/neverend/services/trackbacks/356907.html先配|好环境变量$TOMCAT_HOME

?etc/init.d/目录下新建文件tomcatQ输入如下内容:
#! /bin/sh
# This shell script enables the automatic use of tomcat
#
# Author:      liuxuanyu<neverend06@163.com>
#

RETVAL=0

start() {
    echo -n "Tomcat Starting..."
 echo
 $TOMCAT_HOME/bin/startup.sh
}

stop() {
    echo -n "Tomcat Stop..."
 echo
 $TOMCAT_HOME/bin/shutdown.sh
}

restart() {
 echo -n "Tomcat restart..."
 echo
 stop
 start
}

case "$1" in
 start)
      start;;
 stop)
   stop;;
 restart)
      restart;;
 *)
    echo $"Usage: $0 {start|stop|restart}"
 exit 1
esac

exit $RETVAL

使用ҎQ?br />sudo /etc/init.d/tomcat start
sudo /etc/init.d/tomcat stop
sudo /etc/init.d/tomcat restart



neverend 2011-08-19 23:00 发表评论
]]>
Ubntu下SVN的配|与基本命ohttp://www.aygfsteel.com/neverend/archive/2011/08/15/356596.htmlneverendneverendMon, 15 Aug 2011 15:46:00 GMThttp://www.aygfsteel.com/neverend/archive/2011/08/15/356596.htmlhttp://www.aygfsteel.com/neverend/comments/356596.htmlhttp://www.aygfsteel.com/neverend/archive/2011/08/15/356596.html#Feedback0http://www.aygfsteel.com/neverend/comments/commentRss/356596.htmlhttp://www.aygfsteel.com/neverend/services/trackbacks/356596.html以root用户d
1.下蝲q安装SVN服务
$  sudo apt-get install subversion
$  sudo apt-get install libapache2-svn

2.讄SVN用户l?br />$ sudo addgroup subversion
$ sudo usermod -G subversion -a root
注销后重新登?br />
3.创徏SVN目录
$ sudo mkdir /home/svn
$ cd /home/svn
$ sudo mkdir labproject
$ sudo chown -R root:subversion labproject

4.创徏 SVN 文g仓库Q?br />$ sudo svnadmin create /home/svn/labproject
$ sudo chmod -R g+rws labproject

5. 通过自带协议讉K svnserve 服务?br /> 修改 /home/svn/labproject/conf/svnserve.conf 来配|其讉K控制
 取消一下配|项的注?br /> # [general]
 # password-db = passwd
 
 在password文g中编辑̎号和密码Q格式如?br /> username=password
 注意Q以上两步操作行前不要留MI白字符

 q行svnserve服务
 sudo svnserve -d -r /home/svn/labproject
 配置完成?br /> 如果需要将svnserve讄成开动启动服?br /> 可在/etc/rc.loacl文g中添加:
 sudo svnserve -d -r /home/svn/labproject
 
 基本命o
 讉KSVN仓库Q?br /> $ svn co svn://hostname labproject --username user_name
 新增文gtest.c
 $ svn add test.c
 文件test.c提交到服务器
 $ svn commit -m "comment."
 更新文g仓库
 $ svn up



neverend 2011-08-15 23:46 发表评论
]]>
վ֩ģ壺 ߱| | ٳ| ־| ƽң| Ǹ| ߮| ʯ| | | ׿| | Ҵ| Ұ| ӥ̶| | | ʡ| ۰| ɽ| ǭ| ij| | ʢ| °Ͷ| Ҷ| ɽ| »| ˮ| ̷| | ʲ| ޽| ĺ| ʹ| ˷| ʯ| | | Ͼ| |