4

我在我目前正在处理的 ASP.NET 项目中使用 MySQL,我做了一些测试来测试 MySQL .NET 提供程序的性能,但不幸的是我对结果不太满意。

一个仅打开连接的非常简单的循环在 SQL Server 中速度提高了 10 倍:

// MySQL

const string CONNECTION_STRING = 
"server=localhost;database=testdb;user id=root;password=mypassword;max pool size=250;";
for (int i = 0; i < 5000; i++)
{
  using (MySqlConnection con = new MySqlConnection(CONNECTION_STRING))
  {
    con.Open();
  }
}

// SQL Server

const string CONNECTION_STRING = "Data Source=localhost;Initial Catalog=testdb;Integrated Security=True;max pool size=250;";
for (int i = 0; i < 5000; i++)
{
  using (SqlConnection con = new SqlConnection(CONNECTION_STRING))
  {
    con.Open();
  }
}

SQL Server 在其他方面也快得多(选择、更新、插入等)。我做错什么了吗?我应该更改任何服务器变量吗?

更多信息:
- 我在 Windows (5.0.51a-community-nt) 上运行 MySQL
- 测试中使用了 SQL Server 2005
- 规格:Windows XP SP2,CPU Intel 1.6GHz 双核,1024 MB RAM

这是MySQL的配置:

[client]
port        = 3306
socket      = /tmp/mysql.sock

[mysqld]
port        = 3306
socket      = /tmp/mysql.sock
skip-locking
key_buffer = 384M
max_allowed_packet = 1M
table_cache = 512
sort_buffer_size = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 8M
myisam_sort_buffer_size = 64M
thread_cache_size = 8
query_cache_size = 32M
thread_concurrency = 8

server-id   = 1

[mysqldump]
quick
max_allowed_packet = 16M

[mysql]
no-auto-rehash

[isamchk]
key_buffer = 256M
sort_buffer_size = 256M
read_buffer = 2M
write_buffer = 2M

[myisamchk]
key_buffer = 256M
sort_buffer_size = 256M
read_buffer = 2M
write_buffer = 2M

[mysqlhotcopy]
interactive-timeout

感谢您的任何建议...

4

3 回答 3

4

SQL 服务器默认使用连接池:每个使用完全相同的连接字符串打开的连接在关闭时都会返回到池中。从池中返回连接比从头开始创建连接要高效得多。我假设 MySql默认不提供连接池

于 2009-01-29T12:57:17.127 回答
2

需要考虑的是 mySQL 是如何安装的,你告诉它服务器是专用的 DB 服务器还是工作站?MySQL 可以配置为限制自身,使其不与其他服务冲突,或者采用任何可用的服务。SQL Server 将使用它认为需要的任何资源。我会研究你的mysql服务器是如何配置的,你很有可能在那里得到一些性能改进。

最后,windows 不是 mysql 的首选平台,它是受支持的,但如果您真的希望它执行,请将其放在 linux 系统上,您可以在其中调整文件系统等以获得最佳性能,这是 SQL Server 可以做到的不要做

这里是一些文章、博客、书籍等的链接,用于性能调整 mysql
http://forums.mysql.com/read.php?24,92131,92131

于 2009-04-28T22:41:32.800 回答
0

它可能是连接池,但您还必须考虑这样一个事实,即当 .NET 代码与 Sql Server 通信时,它使用最有效的通道进行通信,因为代码全部由 Microsoft 拥有和控制。如果 .NET 代码正在与第 3 方服务器通信,或者如果某些第 3 方代码正在与 Sql Server 通信,则通信必须更加基于标准和通用,因此速度要慢得多。

这就是为什么在“宠物店”战争期间,ASP.NET 解决方案的运行速度总是比替代解决方案快得多。当您被迫与平台无关时,您可能无法跟上 100% 本机代码。

于 2009-01-29T13:09:39.490 回答