高性能数据库连接池的内幕
|
该自旋比较类似于JDK对synchronized的自旋机制。如果发现超时时间大于设定的阈值(比如10微秒),则会进行线程挂起。如果小于设定的阈值,则重新获取连接,进行自选,避免线程的上下文切换带来的性能开销。。 优化小技巧方法内联优化 1:每调用一次方法,线程便会新建一个栈帧,新建栈帧开销相对比较大 2:JIT在运行时会进行内联优化,多个方法使用一个栈帧,避免栈帧新建过多 3:JIT方法内联优化默认的字节码个数阈值是35个字节,低于35个字节,才会进行优化。(可通过-XX:MaxInlineSize=35进行设置) ![]() 通过修改上述代码,编译后字节码修改到34个字节,则可以满足内联的条件。 心跳语句选择![]() PrepareStatement模式选择![]() MySQL driver默认是client模式,如果需要开启server模式,需要设置 useServerPrepStmts=true 。PrepareStatement默认的client模式和Statement对于DB端没有区别。大家普遍理解PrepareStatement和Statement的区别是PrepareStatement可以避免SQL注入。但是避免SQL注入是如何做到的? 使用PrepareStatement设置参数的时候,比如调用setString(int parameterIndex, String x),本地会对设置的参数进行转义来避免SQL注入。 执行SQL的时候,会将SQL的?替换成转义后的字符,发送到数据库执行。 PSCache![]() MySQLdriver 默认不开启,可通过设置 cachePrepStmts = true 进行开启 QueryTimeout![]() 之前也遇到因为开启了queryTimeout,导致连接泄露的问题。 唯品会自研连接池:CaelusCaelus是唯品会自研的高性能的分布式的数据库连接池。
(编辑:网站开发网_安阳站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |






