我正在测试 MySQL 作为 SQL 服务器的替代品,我遇到了一些非常奇怪的事情。我正在测试插入和读取,并以任何一种方式每秒最多进行大约 50 次查询。
我的测试表是这样的:
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 配置文件 session 显示以下内容:
alt text http://img18.imageshack.us/img18/6812/performance.png
我不知道 MySQL 连接器的内部细节,但是对 mysqldatareader.nextresult 的调用让我很困惑。为什么在执行插入时它在读取?
最佳答案
您正在使用 InnoDB 表。因此,您应该非常注意可能影响或破坏 MySQL 数据库性能的众多设置。 MySQLPerformanceBlog 有几个非常好的 articles在 InnoDB optimization你应该阅读。
关于sql - MySQL性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1592274/