提高与Teradata的连接性能



我需要使用Python连接到Teradata。我遇到的问题是连接数据库的时间太长。

我正在尝试在Python中使用teradata,teradatasqlpyodbc包。我使用的代码类似于:

import teradata
import teradatasql
import pyodbc
import time
udaExec = teradata.UdaExec (appName="HelloWorld", version="1.0", logConsole=False)
try:
host, username, password = 'teradata', 'xxxxx', 'xxxxx'
tic = time.perf_counter()
session = teradatasql.connect(host=host, user=username, password=password, logmech="LDAP")
toc = time.perf_counter()
print(f"TERADATASQL:  {toc - tic:0.4f} seconds")
tic = time.perf_counter()
udaExec.connect(method="odbc", dsn="TD")
toc = time.perf_counter()
print(f"TERADATA:  {toc - tic:0.4f} seconds")
tic = time.perf_counter()
connection = pyodbc.connect('DSN=TD')
toc = time.perf_counter()
print(f"PYODBC:  {toc - tic:0.4f} seconds")
except Exception as e:
print(e)

通常的结果是以下值:

TERADATASQL: 6.2150秒

TERADATA: 2.8512 seconds

PYODBC: 2.6051秒

问题是,大多数时候我将进行非常简单的查询,花费的时间远远少于1秒。

我(自己)开发了一个使用5个预打开连接池的方案。但我认为这是非常初级的,因为它是一个提供多个用户的REST API服务的django。有什么方法可以提高打开连接的性能吗?还有其他解决方案吗?

对我来说,看起来您将LDAP身份验证(TERADATASQL)与默认-身份验证TD2 (UDAExec &PyODBC)。要完整地比较它,ODBC.ini将有助于了解所使用的DSN的详细信息。

除此之外,我知道你可以做些什么来加快连接步骤,除了通过使用一些打开的连接来消除步骤。虽然即使2秒对我来说也相当慢,但我会检查网络/路由以优化这一点。

正如您提到的,将Teradata包含到REST调用中,您是否尝试通过REST直接连接到Teradata ?(称为"Teradata queryservice")

最新更新