我已经为我的 .net 核心应用程序设置了 TiDB。我正在将 TiDB 与 .net 核心应用程序中的 MYSQL 连接器连接起来。下面是我的连接字符串
server=server1,server2,server3;Port=4000;UID=test_user;PWD=****;database=Test_database;ConnectionReset=false;
因为我已经用逗号分隔符指定了连接字符串中的所有节点,并且当尝试加载一些负载时,它总是会转到第一个节点。理想情况下,请求负载应该分布在所有节点上。
我运行SHOW FULL PROCESSLIST
命令来检查仅在第一个节点中显示的应用程序请求。
这是我连接 TiDB 的源代码。
public async Task<Error> ExecuteStatementAsync(Context ctx, MySqlCommand command)
{
Error error = default;
try
{
using (MySqlConnection connection = new MySqlConnection(_connectionString))
{
MySqlTransaction trans = default;
try
{
await connection.OpenAsync();
trans = connection.BeginTransaction();
using MySqlCommand cmd = command;
cmd.Connection = connection;
cmd.Transaction = trans;
cmd.Prepare();
await cmd.ExecuteNonQueryAsync();
trans.Commit();
return null;
}
catch (Exception ex)
{
// populate error
if (trans != null)
{
trans.Rollback();
}
return error;
}
}
}
catch (Exception ex)
{
// populate error
return error;
}
}
public async Task<(DataTable, Error)> SelectAsync(Context ctx, MySqlCommand command, string queryIdentifier)
{
Error error = default;
try
{
using (MySqlConnection connection = new MySqlConnection(_connectionString))
{
DataTable dt = new DataTable();
MySqlCommand cmd = command;
try
{
await connection.OpenAsync();
cmd.Connection = connection;
cmd.Prepare();
using (DbDataReader reader = await cmd.ExecuteReaderAsync())
{
dt.Load(reader);
}
return (dt, null);
}
catch (Exception ex)
{
return (null, error);
}
}
}
catch (Exception ex)
{
return (null, error);
}
}
代码或连接字符串有什么问题吗?为什么会这样?