执行多个INSERT语句-如何优化性能?

2020-08-30 20:20发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)你好,我正在做一个python脚...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


你好,我正在做一个python脚本,该脚本生成并将随机数据插入表中。

属性是随机字符串和整数(我已经完成了一个生成随机字符串的函数,对于使用随机库的整数)。 我填写表的函数将各种属性放入INSERT(...)语句(它是一个字符串)。 然后将执行此字符串(Cursor.execute(string))。

问题是我需要用百万行填充表。 大约需要30秒。 执行10.000 INSERT语句。 我试图在字符串中执行多个INSERT语句以减少对Cursor.execute()的调用。 之后程序崩溃了:/为了调试,我将Statement打印到控制台,将其ant粘贴到sap hana SQL控制台中-> Statement没错,但是为什么在我的python脚本上不起作用?

还有其他优化性能的可能性吗? 我还尝试了带有线程的版本和具有多个连接器的版本,但是实际上并没有提高性能……

1条回答
大简至美
2020-08-30 20:48

实际上没有看到您的代码,很难确定这里发生了什么。

但是,根据您的描述,您的代码会这样做:

  1. 生成随机值
  2. 使用生成的值构建插入命令字符串
  3. 执行插入命令。
  4. 由于autocommit =会自动发出提交 默认情况下

如果是这种情况,则很可能导致性能下降的原因是步骤2)和步骤4)

通过为每个集合创建一个新语句 对于应插入的值,您可以强制HANA(和其他所有DBMS)重新解析该语句。 这会花费很多时间。

要解决此问题,请在语句中使用主机变量,然后准备一次该语句并为要插入到其中的每个新行绑定新值。 这样,数据库所需要做的就是将新值分配给语句变量并立即执行插入操作。

另一个问题是HANA python驱动程序hdbcli的默认值为autocommit = on。 请确保在插入循环之前在连接上使用setautocommit(false),并仅在完成后提交一次。

对此非常简单易懂的介绍可以在此博客文章https://blogs.sap.com/2017/07/ 26/sap-hana-2.0-sps02-new-feature-updated-python-driver/

一周热门 更多>