动机| 假设有人想要对 Snowflake DB 执行两个 SQL 查询,相隔约 20 分钟。
优化问题| 这将花费更少的云服务积分:
- 重新使用一个连接,并允许该连接在此期间空闲。
- 每个查询连接一次。
该文档表明身份验证会导致云服务信用使用,但没有说明空闲连接是否会导致信用使用。
问题| 有谁知道空闲连接是否会导致云服务信用使用?
动机| 假设有人想要对 Snowflake DB 执行两个 SQL 查询,相隔约 20 分钟。
优化问题| 这将花费更少的云服务积分:
该文档表明身份验证会导致云服务信用使用,但没有说明空闲连接是否会导致信用使用。
问题| 有谁知道空闲连接是否会导致云服务信用使用?
雪花连接是无状态的。它们不占用资源,也不需要像其他数据库连接一样保持 TCP/IP 连接处于活动状态。
因此,空闲连接不会消耗任何云服务层信用,除非您启用“CLIENT_SESSION_KEEP_ALIVE”。
https://docs.snowflake.com/en/sql-reference/parameters.html#client-session-keep-alive
当您设置 CLIENT_SESSION_KEEP_ALIVE 时,客户端将更新会话的令牌(默认值为 1 小时)。
正如 Peter 所提到的,高达 10% 的每日仓库使用量的 CSL 使用量是免费的,因此在实践中刷新代币不会花费您任何费用。
关于您的方法:我不知道您计划每天运行多少个查询,但为每个查询创建一个新连接可能会成为性能杀手。从成本的角度来看,空闲连接一天最多会执行 24 个授权请求,所以如果您计划一天运行超过 24 个查询,我建议您选择第一种方法。
即使空闲连接在云服务方面不花费任何成本,您的仓库是否使用空闲连接运行,因此需要考虑其他成本?我猜想总体上还有更多因素需要考虑,您可以与 Snowflake 客户团队讨论这些因素。不是试图回避你的问题,而是试图给出一个更健康的答案!
通常,与您的其他成本相比,云服务成本通常较低。以下是云服务成本的主要驱动因素以及如何将其最小化: https ://community.snowflake.com/s/article/Cloud-Services-Billing-Update-Understanding-and-Adjusting-Usage
您可能得到的最佳建议是测试您的连接/工作流程并比较一段时间内的成本。总成本将取决于几个因素。即使两个工作流之间的成本存在差异,您仍可能需要分析成本/产出比,您的业务需要确定是否值得节省。
方法 1 会减少云服务的使用,但会产生更多的数据传输费用(以保持连接有效)。只有 Auth 事件会导致使用云服务。
方法 2 会产生更多的云服务使用,但会产生更少的数据传输费用。
但是,无论哪种情况,云服务使用量或数据传输费用都非常少。
注意 - 使用的任何云服务(最多 10% 的每日仓库使用量)都是免费的,而没有免费的带宽分配,所以使用 #2 可以为您节省几分钱。