我正在測試MySQL作爲SQL服務器的替代品,我遇到了一些非常奇怪的事情。我正在測試插入和讀取,並且每秒最多可以處理大約50個查詢。mysql性能
我的測試表如下所示:
DROP TABLE IF EXISTS `webanalytics`.`test`;
CREATE TABLE `webanalytics`.`test` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(45) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1001 DEFAULT CHARSET=utf8;
而我的C#測試程序是這樣的:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MySql.Data.MySqlClient;
using System.Diagnostics;
namespace ConsoleApplication1
{
class Program
{
const int QUERY_COUNT = 1000;
const string CONNECTION_STRING = "server=localhost;database=WebAnalytics;uid=root;pwd=root";
static void Main(string[] args)
{
using (var db = new MySqlConnection(CONNECTION_STRING))
{
db.Open();
using (var cmd = db.CreateCommand())
{
cmd.CommandText = "insert into Test(Name) values (?Name);";
cmd.Parameters.AddWithValue("?Name", "");
var timer = new Stopwatch();
timer.Start();
for (var i = 0; i < QUERY_COUNT; i++)
{
cmd.Parameters["?Name"].Value = "Test" + i;
cmd.ExecuteNonQuery();
}
timer.Stop();
var rate = QUERY_COUNT/(timer.ElapsedMilliseconds/1000);
Console.WriteLine("Query rate: {0}/s", rate);
}
}
}
}
}
似乎是一個相當簡單的測試用例。在安裝MySQL時,我使用默認的OLTP標準服務器設置運行32位,但我必須將innodb的緩衝池從2G調整到1G。我不知道瓶頸在哪裏。 MySQL數據連接器越野車?一個dottrace輪廓會議揭示了以下情況:
alt text http://img18.imageshack.us/img18/6812/performance.png
我不知道MySQL的連接器的內部細節,但呼籲mysqldatareader.nextresult迷惑我。爲什麼在執行插入操作時會讀取數據?
什麼是你的MySQL服務器版本?你在MySQL查詢瀏覽器中運行查詢嗎? MySQL的性能不應該那麼慢。如果可能,你可以發佈你的my.ini細節嗎? – Raptor 2009-10-20 03:26:41
這是因爲innodb引擎正在沖洗磁盤而不是緩衝區,正如我在下面對Asaph的評論中指出的那樣。改變一個設置就可以修復它。 – Chris 2009-10-20 04:07:39