SQLServer数据库JDBC连接串参数的简单学习


背景

前段时间一直跟同事一起处理SQLServer 比其他数据库的deadlock更多的问题.
涉及到了几个驱动的参数. 想着问题基本上告一段落, 将这一块的情况总结一下.
便于后续遇到问题时的快速处理.

关于参数

现阶段的字符连接串为:
jdbc:sqlserver://ip:port;database=dbname;SelectMethod=direct;sendStringParametersAsUnicode=false 主要是修改了这两个字符串:
SelectMethod=direct
以及
sendStringParametersAsUnicode=false 这两个参数的含义:
1. SelectMethod
当这个参数值为cursor时, 理论上数据库里面被跟踪到了:
FETCH API_CURSOR00000000000880BE
类型的SQL就会少很多.
根据官网的解释, 这个参数是cursor 时, 会对大查询创建多个游标, 然后使用jdbc的client就可以每次获取一部分结果集来进行使用
当需要更多结果集时, 使用查询SQL时创建的这个游标 执行FETCH就可以获取后面的查询结果集.
优点:
降低jdbc客户端的内存使用量.每次只需要返回和接受一部分数据就可以了.
将值修改为 direct之后:
客户端需要全量返回数据, 对客户端内内存要求变高,但是大量数据的查询性能会变好
并且便于分析问题. 知道是谁被阻塞了. 2. sendStringParametersAsUnicode
这个参数是为了解决非utf8字符集情况下 unicode乱码问题的.
他会自动给应用程序生成的SQL做一次varchar类型到 nvarchar类型的转换.
会导致产品中大量出现隐式转换, 引起性能下降.
微软官方解释, 曾经将这个参数修改成false, 将数据库CPU使用率从100%,优化到30% 但是存在一个风险是,如果代码开发时 数据库时 nvarchar字段,用于存放多国语言, 但是程序里面使用的是varcahr字段类型
有一定的概率出现乱码的情况. 需要应用层进行适配和修改. 需要注意, 单独修改链接字符串可能无效, 需要jdbc解析字符串,并且准确的进行参数传递.

其他的优化知识

前期在查看durid连接池时,发现应用层总有一个: PrepateStatement 的参数信息
Oracle数据库很早之前就已经实现了. 应用层进行了SQL变量绑定之后,理论上每次过来的参数可以实现软软解析,最大程度的降低数据库的CPU算力.提高性能. SQLServer数据库这一方面应该也有, 但是需要改天进行一下验证

一个简要总结

修改参数和修改驱动其实没啥太大的区别
建议必须做一下比较完备的功能验证. 一方面不应该导致性能下降, 至少应该在80%的大规模使用的场景上有性能提升才可以.
一方面 应该保证已有功能准确可用, 不会出现程序错误和乱码以及其他异常问题 如果仅仅是一两个功能有问题,可以找对应的开发进行修改和完善
如果是大批量的报错, 则需要综合评估一下修改的成本和产出.

官网的部分参数

第一个:
sendStringParameters
If the sendStringParametersAsUnicode property is set to "true", String parameters are sent to the server in Unicode format.
If the sendStringParametersAsUnicode property is set to "false", String parameters are sent to the server in non-Unicode format such as ASCII/MBCS instead of Unicode.
The default value for the sendStringParametersAsUnicode property is "true". 第二个:
selectMethod
If this property is set to "cursor," a database cursor is created for each query created on the connection for TYPE_FORWARD_ONLY and CONCUR_READ_ONLY cursors.
This property is typically required only if the application generates large result sets that can't be fully contained in client memory.
If this property is set to "cursor," only a limited number of result set rows are kept in client memory.
The default behavior is that all result set rows are kept in client memory.
This behavior provides the fastest performance when the application is processing all rows. 第三个:
serverPreparedStatement
(Version 6.2+)
This property can be used to control how many outstanding prepared statement discard actions (sp_unprepare) can be outstanding per connection
before a call to clean up the outstanding handles on the server is executed.
If this property is set to <= 1, unprepare actions are executed immediately on prepared statement close.
If it's set to > 1, these calls are batched together to avoid overhead of calling sp_unprepare too often. 其他类型:
workstationID
The workstation ID. Used to identify the specific workstation in various profiling and logging tools. userName
The database user, if connection with SQL user and password. sendTimeAsDatetime
Set to "true" to send java.sql.Time values to the server as SQL Server datetime values.
Set to "false" to send java.sql.Time values to the server as SQL Server time values.

一个其他的知识

使用mysql的预编译对象PrepateStatement时,
一定需要设置useServerPrepStmts=true开启服务器预编译功能,
设置cachePrepStmts=true开启客户端对预编译对象的缓存。 作者:zhuke
链接:https://www.jianshu.com/p/d46f84aef4bc

SQLServer数据库JDBC连接串参数的简单学习的更多相关文章

  1. sqlServer数据库常用连接字符串

    sqlServer   数据库常用连接字符串 用户名和密码验证的方式去连接到数据库服务器 <add name="conStr" connectionString=" ...

  2. SQLServer数据库之连接查询

    SQLServer数据库之连接查询 表的连接查询的几种方法介绍: inner join on内连接,left join on 左连接 , rigth join on 右连接, full join on ...

  3. Oracle可插拔数据库的jdbc连接串写法

    我在服务器上部署某个第三方系统的数据库的时候,服务器数据库版本为oracle 12c.我采用的方式是新建了一个实例.访问正常. 后来项目的负责人告诉我,oracle12C支持所谓的可插拔数据库.可插拔 ...

  4. oracle,sqlserver,mysql常见数据库jdbc连接

    发现JDBC连接字符串总是容易忘记,特此整理一下常用的几种数据的连接 ORACLE: /** * ORACLE * */ public static Connection getOracleConne ...

  5. jdbc连接sql server2017进行简单的增、删、改、查操作

    这几天刚做完数据库的课程设计,来稍微总结一下如何通过jdbc访问sql server数据库进行简单的增删改查操作.在连接之前,需要简单地配置一下,包括下载对应jdk版本的驱动,设置环境变量等等.相关配 ...

  6. 数据库 ----jdbc连接池的弊端

    jdbc连接池的弊端 1.数据库连接,使用时就创建,不使用立即释放,对数据库进行频繁连接开启和关闭,造成数据库资源浪费,影响 数据库性能.设想:使用数据库连接池管理数据库连接.2.将sql语句硬编码到 ...

  7. Java操作Sqlite数据库-jdbc连接

    Java操作Sqlite数据库步骤: 1. 导入Sqlite jdbc 本文使用sqlite-jdbc-3.7.2.jar,下载地址 http://pan.baidu.com/s/1kVHAGdD 2 ...

  8. ASP.net分别连接SQLserver数据库与连接Access数据库精英版

    -------------------------连接access2003 字符串------------------------- Provider=Microsoft.Jet.OLEDB.4.0; ...

  9. Mysql JDBC 连接串参数说明

    MySQL的 JDBC URL 格式 for  Connector/J 如下例: jdbc:mysql://[host:port],[host:port].../[database][?参数名1][= ...

  10. Mysql、Oracle、SqlServer的JDBC连接实现和对比(提供驱动包)

    首先,我们需要准备数据库连接所需的jar包.目前mysql的驱动包可能比较好找,但是oracle和sqlserver的有很多,要找到能用的要花一点点心思,这里直接把下载地址和版本发送出来. Mysql ...

随机推荐

  1. 前端 Git 使用约定

    前端 Git 使用约定 背景 开发前端项目,有以下困惑: 使用哪个分支开发,哪个分支发布 修复线上bug的流程是什么,如何避免修复完了下次却又出现了 cms分支有十多个,是否都有用 如何快速找到之前某 ...

  2. Pikachu漏洞靶场 Unsafe Filedownload(不安全的文件下载)

    不安全的文件下载 概述 文件下载功能在很多web系统上都会出现,一般我们当点击下载链接,便会向后台发送一个下载请求,一般这个请求会包含一个需要下载的文件名称,后台在收到请求后会开始执行下载代码,将该文 ...

  3. MongoDB 安装、配置及详细使用教程

    环境:win10 下载地址 :https://pan.baidu.com/s/1a0SwRv9er3HTewzcI8nWgQ      提取码:dyyx   下载后,将该文件夹放在C盘的根目录下,然后 ...

  4. Next.js 开发指南 路由篇 | 动态路由、路由组、平行路由和拦截路由

    前言 实际项目开发的时候,有的路由场景会比较复杂,比如数据库里的文章有很多,我们不可能一一去定义路由,此时该怎么办?组织代码的时候,有的路由是用于移动端,有的路由是用于 PC 端,该如何组织?如何有条 ...

  5. “互联网+”大赛之AI创新应用赛题攻略:大胆脑洞,共绘智慧生活蓝图

    摘要:本次"互联网+"大赛AI创新应用赛题的设置是希望学生可以从日常实际应用需求出发,结合自己的奇思妙想,提升智能终端用户的使用体验,为构建万物互联的智能世界贡献一份力量. 本文分 ...

  6. Hadoop中mapreduce作业日志是如何生成的

    摘要:本篇博客介绍了hadoop中mapreduce类型的作业日志是如何生成的.主要介绍日志生成的几个关键过程,不涉及过多细节性的内容. 本文分享自华为云社区<hadoop中mapreduce作 ...

  7. Kubernetes(K8S) Deployment 升级和回滚

    创建部署详见 Kubernetes(K8S) Deployment 部署 Pod 传统应用升级,一般是V1.0的jar包,有一个应对 1.0 的 shell 启动脚本.升级时,传 2.0 的 jar包 ...

  8. 【Go】函数高级 包的使用 gin框架入门 if-else 循环 switch 数组

    目录 昨日回顾 今日内容 1 函数高级 2 包的使用 3 gin框架使用 4 if-else 5 循环 6 switch 7 数组 昨日回顾 # 1 go 基础数据类型 -数字:整数,正整数,浮点数, ...

  9. 【django-vue】课程表数据录入 课程分类接口 所有课程接口 课程详情接口 所有章节接口 课程列表前端 课程详情前端

    目录 上节回顾 APSchudler 双写一致性 今日内容 1 课程表数据录入 2 课程分类接口 2.1 路由 2.2 序列化类 2.3 视图类 3 所有课程接口(过滤,排序) 3.1 表模型 3.2 ...

  10. Mongodb--索引(转载)

    原文转载自:https://www.cnblogs.com/wyy1234/p/11032163.html 1 mongoDB索引的管理 本节介绍mongoDB中的索引,熟悉mysql/sqlserv ...