ASP.NET,MySQL与SQL Server中的数据库连接

时间:2009-01-29 12:50:22

标签: .net asp.net mysql sql-server connection-pooling

我在一个我正在研究的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上运行MySQL(5.0.51a-community-nt)
- 测试中使用了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

感谢您的任何建议......

3 个答案:

答案 0 :(得分:4)

默认情况下,SQL Server使用连接池:关闭时,使用完全相同的连接字符串打开的每个连接都将返回到池中。从池中返回连接比从头创建连接更有效。我假设MySql默认情况下不提供连接池

答案 1 :(得分:2)

需要考虑的是mySQL的安装方式,您是否告诉它服务器是专用的数据库服务器还是工作站? MySQL可以配置为限制自身,以便它不与其他服务冲突,或采取任何可用的。 SQL Server将使用它认为需要的任何资源。我会研究一下你的mysql服务器是如何配置的,你很有可能在那里获得一些性能提升。

最后,windows不是mysql的首选平台,它是支持的,但是如果你真的希望它执行将它放在一个linux系统上,你可以在那里调整文件系统等以获得最佳性能,那就是SQL服务器就是做不到

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

答案 2 :(得分:0)

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

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