sql - MySQL性能

标签 sql mysql performance

我正在测试 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 有几个非常好的 articlesInnoDB optimization你应该阅读。

关于sql - MySQL性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1592274/

相关文章:

php - 如何将 list 值保存到 MySQL 并能够重新填充复选框?

mysql - 如何在 SQL 中将两个表连接在一起?

mysql - 如何在mysql程序中写入 "WITH CTE AS ( SELECT ROW_NUMBER() OVER ( ORDER BY CASE"

javascript - 创建自定义头像

mysql - ENOENT : no such file or directory, 统计 '/Users/sampai/Desktop/Repos/task_tracker/task_tracker/build/index.html'

c# - 这种缓慢的 WPF TextBlock 性能是否符合预期?

sql-server - 添加参数时SSIS性能下降

sql - Varchar 变量在 WHERE 子句中不起作用

jQuery 在缓慢运行期间显示 "loading"

SQL如何连接两个表