Kettle数据库连接高级配置及连接池配置详解
创作时间:
作者:
@小白创作中心
Kettle数据库连接高级配置及连接池配置详解
引用
CSDN
1.
https://blog.csdn.net/weixin_42924611/article/details/145732205
本文详细介绍了Kettle(Pentaho Data Integration)中数据库连接的高级配置和连接池配置。通过本文,读者可以了解各个参数的具体作用和推荐配置值,从而优化Kettle的数据处理和ETL工作流程。
一、高级配置
选项名称 | 作用 | 备注 |
---|---|---|
支持布尔数据类型 | 允许支持布尔数据类型的字段,通常用于存储布尔值(true或false)。 | 关系型数据库不直接支持布尔数据类型,而是使用特定的数据类型来表示布尔值,比如在 MySQL 中使用的是TINYINT(1)。当使用 Kettle 进行数据处理时,需要将布尔值从 Kettle 传递给数据库中的相关列,此时就需要确保数据库连接池能够正确地将布尔类型的值传递给数据库。如果选择了 “支持布尔数据类型”,那么在配置中插入布尔值,连接池会将布尔值转换为数据库支持的数据类型。比如,将布尔值true转换为1,将布尔值false转换为0,以便正确地与数据库进行交互。但如果选择了 “不支持布尔数据类型”,连接池会抛出错误或警告。 |
Supports the timestamp data type | 允许支持时间戳数据类型,用于存储日期和时间。 | 时间戳数据类型用于存储日期和时间信息,并且在许多数据库中都有特定的数据类型来表示时间戳,例如 MySQL 中的TIMESTAMP。如果选择了 “支持时间戳数据类型”,那么在配置中插入的时间戳值会被连接池直接传递给数据库,并且可以正确处理和存储时间戳类型的数据。如果数据库对标识符的大小写敏感,建议勾选以正确处理标识符。 |
标识符使用引号括起来 | 标识符使用引号括起来,确保标识符不会被解析为关键字。 | |
强制标识符使用小写字母 | 强制标识符使用小写字母,确保标识符不会混合大小写。 | 如果数据库要求标识符严格使用小写字母,建议勾选。 |
强制标识符使用大写字母 | 强制标识符使用大写字母,确保标识符不会混合大小写。 | 如果数据库要求标识符严格使用大写字母,建议勾选。 |
Preserve case of reserved words | 保留保留字的大小写,避免保留字被错误解析。 | 如果应用程序使用保留字(如AS、FROM等),勾选该选项可以确保保留字的大小写正确无误,避免语法错误。 |
Default schema name. Use it when no other schema name is specified. | 默认模式名称,在没有其他模式名时使用指定的模式名称。 | |
Execute SQL statement on connection success | 连接成功后执行指定的SQL语句,使用分号分隔多个语句。 | 这个功能通常用于在建立数据库连接后,需要进行一些初始化或准备工作的场景。例如,你可能希望在每次建立连接时都自动进行一些特定的查询或设置一些会话参数。通过配置这个选项,你可以在连接成功后自动执行这些 SQL 语句,而不需要在每次连接后手动执行。 |
二、JDBC参数配置
参数名称 | 参数作用 | 推荐值 | 推荐理由 |
---|---|---|---|
useServerPrepStmts | 启用服务器端预处理语句,提升批量操作性能 | true | 减少客户端预处理开销,提升批量操作效率(需结合rewriteBatchedStatements使用) |
useCompression | 启用客户端与MySQL服务器通信压缩,减少网络带宽占用 | false | 压缩会增加CPU负载,仅在网络带宽受限时启用(如远程数据库) |
rewriteBatchedStatements | 重写批量SQL语句(如合并INSERT语句),提升批量写入性能 | true | 显著提升批量插入/更新性能(如ETL场景) |
defaultFetchSize | 设置结果集每次从数据库获取的行数,平衡内存与网络开销 | 500-1000 | 减少内存占用,避免一次性加载大结果集(需结合useCursorFetch=true生效) |
useCursorFetch | 启用游标逐块获取结果集,减少内存占用 | true(大数据量) | 处理大结果集时避免OOM,但可能略微增加延迟 |
characterEncoding | 指定连接字符编码(如UTF-8) | UTF-8 | 避免中文乱码,兼容多语言字符 |
maxReconnects | 定义连接断开后最大重试次数 | 3 | 防止无限重试导致线程阻塞,兼顾容错性 |
autoReconnect | 连接断开后自动重连 | false | 自动重连可能导致事务状态不一致,建议由连接池管理重试 |
nullCatalogMeansCurrent | 将null目录视为当前数据库 | true | 兼容旧版本JDBC驱动行为,避免跨库操作问题 |
useSSL | 启用SSL加密通信 | true(生产环境) | 保障数据传输安全,但需配置证书(测试环境可设为false) |
serverTimezone | 指定数据库服务器时区(如Asia/Shanghai) | 与数据库一致 | 避免时间字段转换错误(如Java应用与MySQL时区不一致) |
useUnicode | 强制使用Unicode编码 | true | 确保非ASCII字符(如中文)正确存储和读取 |
failOverReadOnly | 故障转移时是否仅允许只读操作 | true | 避免主从切换时写入数据导致不一致 |
connectTimeout | 建立连接超时时间(毫秒) | 3000 | 防止网络故障时线程长时间阻塞 |
socketTimeout | 网络读写超时时间(毫秒) | 60000 | 避免慢查询或网络问题导致线程挂起 |
allowPublicKeyRetrieval | 允许从服务器获取公钥(解决SSL连接问题) | false | 存在安全风险,仅在MySQL 8.0+且SSL配置错误时临时启用 |
maxAllowedPacket | 设置客户端允许的最大数据包大小(单位:字节) | 16777216 | 避免大数据插入/查询时报Packet too large错误 |
使用以下组合可以显著提升批量操作和大数据查询效率:
useServerPrepStmts=true
rewriteBatchedStatements=true
useCursorFetch=true
defaultFetchSize=1000
三、连接池配置
参数名称 | 参数作用 | 默认值 | 推荐值 | 推荐值理由 |
---|---|---|---|---|
连接池大小 | 连接池的大小,即同时保持的连接数量。 | 50 | 根据CPU核心数(4-8核)和并发需求,50个连接可以满足大多数场景 | |
最大空闲空间 | 最大空闲连接数,表示连接池中允许保持的空闲连接的最大数量。 | 10 | 保持10个空闲连接可以快速响应突发请求,同时不会占用过多资源 | |
defaultAutoCommit | 连接的默认自动提交状态。默认情况下,新连接会设置为true,表示每次操作后自动提交。设置为 false 时,表示连接不会自动提交事务,需要手动调用 commit() 方法来提交事务。 | true | false | 建议关闭自动提交,以便更好地控制事务边界,避免意外提交 |
defaultReadOnly | 当 defaultReadOnly 参数设置为 true 时,表示连接将以只读模式进行操作;当设置为 false 时,表示连接可以进行读写操作。 | false | 默认允许读写操作,除非明确知道只需要读操作 | |
defaultTransactionIsolation | 新连接的默认事务隔离级别,包括* NONE:表示不支持事务* READ_COMMITTED:表示一个事务可以读取另一个事务修改但还没有提交的数据。这可以导致脏读、不可重复读和幻读的问题。* READ_UNCOMMITTED:表示一个事务只能读取另一个事务已经提交的数据,可以避免脏读,但是不可重复读和幻读仍然可能发生。* REPEATABLE_READ :表示一个事务在整个过程中都可以看到同样的数据记录。可以避免脏读和不可重复读,但是仍可能出现幻读问题。* SERIALIZABLE:表示事务串行执行,可以避免脏读、不可重复读和幻读,但会影响性能。 | READ_COMMITTED | 在性能和一致性之间取得平衡,避免脏读同时保持较好性能 | |
defaultCatalog | 新连接的默认目录(schema)。 | 根据需求设置 | 由具体业务数据库决定,通常不需要设置 | |
initialSize | 连接池启动时创建的初始连接数量。 | 0 | 5 | 启动时创建5个连接,可以快速响应初始请求 |
maxActive | 连接池中同时允许的最大活跃连接数量,负值表示无限制。 | 8 | 50 | 最大活跃连接数设置为50,可以应对高峰期的并发需求 |
maxIdle | 连接池中可以保持空闲而不释放额外连接的最大连接数,-1表示没有限制。 | 8 | 20 | 最大空闲连接数设置为20,在空闲时保持一定连接数以快速响应 |
minIdle | 连接池中允许的最小空闲连接数量。 | 0 | 5 | 最小空闲连接数保持5个,确保随时有可用连接 |
maxWait | 连接池等待可用连接的最大时间(毫秒),-1表示无限等待。 | -1 | 30000 | 推荐值为30000毫秒(30秒),适用于一般的连接等待情况。 |
validationQuery | 用于验证连接存活的SQL查询,必须是一个返回至少一行的SELECT语句。 | “SELECT 1 NOW()” | 推荐使用简单的查询,确保连接存活。 | |
testOnBorrow | 在获取连接时进行验证。如果验证失败,连接会被移除。 | true | true | 在获取连接时验证,确保获取的连接是有效的 |
testOnReturn | 在归还连接时进行验证。 | false | true | 归还时不需要验证,减少性能开销 |
testWhileIdle | 空闲连接时进行验证。 | false | true | 空闲时定期验证连接,及时清理无效连接 |
timeBetweenEvictionRunsMillis | 空闲连接清理线程等待的时间(毫秒)。 | 60000 | 推荐值为60000毫秒(60秒),适用于一般的空闲连接清理。 | |
poolPreparedStatements | 是否启用准备语句池。 | false | true | 启用准备语句池,提高SQL执行效率 |
maxOpenPreparedStatements | 同时允许的最大准备语句数量。 | -1 | 100 | 推荐值为100,适用于处理大量预编译语句的情况。 |
accessToUnderlyingConnectionAllowed | 是否允许访问连接池的底层连接。 | false | false | 禁止访问底层连接,确保连接池管理可控 |
removeAbandoned | 是否移除被遗弃的连接。 | false | true | 启用遗弃连接移除,防止连接泄漏 |
removeAbandonedTimeout | 被遗弃连接的超时(秒)。 | 300 | 60 | 300秒后移除被遗弃的连接 |
logAbandoned | 是否对被遗弃的连接记录日志。 | false | true | 记录被遗弃的连接日志,便于排查问题 |
本文原文来自CSDN
热门推荐
这些囊肿很危险,体检发现要警惕
湿疹为什么反复发作?试试这些招数吧!
RAG性能优化杀器,引入上下文检索!
武汉理工大学:开展面向国产MindSpore平台的教学实践
每天温水泡脚有什么好处
连续流高温反应:通过热过程发现反应
工地争议!底板后浇带止水钢板开口向下还是向上?
易经中九五是什么意思
超市加盟项目经理:职责、能力要求与提升方法
冯氏北燕:一个弱小而伟大的"辽西王朝"
如何预测现货黄金走势图?这种预测需要哪些技术分析工具?
基金产品类型大盘点:净值型基金有何独特优势?
长期吃燕麦的不良后果是什么
宝宝独立吃饭的方法
生活中的文化,说文解“袜”
直播带货商品质量问题及应对策略
草莓的季节轮舞:探索最佳采摘和品尝时机
师父息怒 不孝:传统师徒关系的法律边界与责任
你家娃身高达标了吗?关于儿童身高,家长们快来打卡这些知识点
“鬼才导演”姜文,24年只拍了6部电影,每一部都堪称神作!
五万韩币等于多少人民币?
从“校对”到“内容风控师”,平台型媒体内容审核的现状、挑战与对策
军事预备役:为国家安全保驾护航的专业力量
大盘下跌时如何选择股票?这种选股方法有哪些适用条件?
网上挂号的取消流程是怎样的?取消预约时需要注意哪些事项?
街道矛盾纠纷调解工作实践与探索
教师资格证体检要求详解:这些情况会被认定为不合格
种植牙的过程步骤是什么
绍兴的年夜饭,令人期待的美食盛宴!
肿了用鸡蛋怎么敷