4

現在取り組んでいるASP.NETプロジェクトでMySQLを使用しており、MySQL .NETプロバイダーのパフォーマンスをテストするためにいくつかのテストを実行しましたが、残念ながら、結果にはあまり満足していません。

接続を開くだけの非常に単純なループは、SQLServerでは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 Serverは、デフォルトで接続プールを使用します。まったく同じ接続文字列で開かれた各接続は、閉じられたときにプールに返されます。プールから接続を返す方が、最初から接続を作成するよりもはるかに効率的です。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コードがサードパーティのサーバーと通信している場合、または一部のサードパーティのコードがSQL Serverと通信している場合、通信はより標準ベースで汎用的である必要があるため、通信速度は大幅に低下します。

そのため、「ペットショップ」戦争中、ASP.NETソリューションは常に代替ソリューションよりもはるかに高速に実行されていました。プラットフォームにとらわれないように強制されると、100%ネイティブコードに追いつくことができない可能性があります。

于 2009-01-29T13:09:39.490 に答える