使用ODBC驱动程序的Teradata和Insert语句的性能问题

时间:2019-12-12 14:18:39

标签: sql odbc teradata database-performance

使用Teradata数据库时,使用Teradata ODBC驱动程序和Ado.net时会遇到一些性能问题。两者均在16.20.x版中可用。一个简单的INSERT语句执行需要40到105毫秒。使用1到2毫秒之间的SQLServer进行了比较。对于两个系统,所有SQL命令的执行都完全相同。

创建表查询

CREATE TABLE DD_Teradata_ODBC (ID VARCHAR (255) NOT NULL, Feld1 VARCHAR (255), Feld2 VARCHAR (255), 
Feld3 VARCHAR (255), Feld4 VARCHAR (255), Feld5 VARCHAR (255), Feld6 VARCHAR (255), Feld7 VARCHAR (255), 
Feld8 VARCHAR (255), Feld9 VARCHAR (255), Feld10 VARCHAR (255), Feld11 VARCHAR (255), Feld12 VARCHAR 
(255), Feld13 VARCHAR (255) , PRIMARY KEY(ID))

在for循环中运行此查询,得出50.000次。

INSERT INTO DD_Teradata_ODBC (ID, Feld1, 
Feld2,Feld3,Feld4,Feld5,Feld6,Feld7,Feld8,Feld9,Feld10,Feld11,Feld12,Feld13) VALUES ('{0}', '{1}', 
'{2}', '{3}', '{4}', '{5}', '{6}', '{7}', '{8}', '{9}', '{10}', '{11}', '{12}', '{13}');

一次打开​​连接,并在for循环中调用ExecuteQuery函数。

private static void ExecuteQuery(string query)
{
    var data = new List<string>();
    _connections.ForEach(conn =>
    {
        using (var command = new OdbcCommand(query, conn))
        {
            try
            {
                var sw = Stopwatch.StartNew();
                var result = command.ExecuteNonQuery();
                data.Add($"{conn.Driver}\t {sw.ElapsedMilliseconds}");
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }

    });

    var line = string.Join("\t", data);
    Console.WriteLine(line);

    File.AppendAllLines(@"c:\temp\teradata_vs_sqlserver.csv", new[] { line });
}

Id进行了一些性能跟踪,但发现Ado.net和odbc驱动程序的行为相同。

DotTrace_compare


Teradata ODBC

当我根据执行时间绘制图表时,确实感到困惑。 execution time chart

有人知道这里可能出什么问题吗?时间是怎么回事?

0 个答案:

没有答案