当前位置: 首页 > 面试题库 >

mysql性能

程正阳
2023-03-14
问题内容

我正在测试MySQL作为SQL Server的替代产品,并且遇到了一些非常奇怪的事情。我正在测试插入和读取,并且以任何一种方式每秒最多处理约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的安装中,尽管我必须将innodb的缓冲池从2G降低到1G,但我正在使用默认OLTP标准服务器设置运行32位。我不知道瓶颈在哪里。MySQL数据连接器是否有故障?dottrace概要文件会话显示以下内容:

替代文字http://img18.imageshack.us/img18/6812/performance.png

我不知道MySQL连接器的内部细节,但是对mysqldatareader.nextresult的调用使我感到困惑。当我执行插入操作时,为什么读取?


问题答案:

您正在使用InnoDB表。因此,您应该非常注意可能影响或破坏MySQL数据库性能的众多设置。MySQLPerformanceBlog有一些关于InnoDB优化的非常好的文章,您应该阅读。



 类似资料:
  • 问题内容: 我在比较MySQL数据库的写入性能方面比较了node.js和PHP。我正在从此处使用Apache Benchmark,虚拟机中的Linux Mint,最新的mysql- server(5.5.43)和用于带有node.js的MySQL驱动程序。我使用的代码是 server.js index.php 使用index.php文件的Apache Benchmark到Apache2服务器 PH

  • 问题内容: 这两个查询在具有1000万行的表上运行缓慢。我想知道为什么为什么从mysql保留所有insert,update和delete更新的计数器变得不容易? 有没有办法改善这个查询?我使用了说明,但并没有太大帮助。 问题答案: 正如cherouvim在评论中指出的那样,它取决于存储引擎。 确实会保留表行的计数,并且由于MyISAM支持的唯一锁是表锁,因此可以保持准确。 但是支持事务,因此需要进

  • 问题内容: 我分两个步骤运行MYSQL查询。首先,通过一个查询获取ID列表,然后使用第二个查询沿的方式检索这些ID的数据。我知道这听起来很骇人听闻,但是由于查询非常复杂,我已经这样做了。第一个涉及许多几何和触发法,第二个涉及许多不同的联接。我确定它们可以在单个查询中编写,但是我的MYSQL不足以实现它。 这种方法有效,但是 感觉 不对。再加上我担心它不会扩展。目前,我正在10,000个记录的数据库

  • 问题内容: 我有一张约有100,000个用户的表。 第一种情况: 当我为上述查询做一个解释计划时,我得到的费用为5200 第二种情况: 当我对第二个查询做一个解释计划时,我得到的费用为100,000。 视图中的where子句如何工作?在视图检索所有行之后是否应用where子句?如何解决此问题? 问题答案: 这是关于已使用的视图算法的。 该 合并 算法行之有效最表的索引和诸如此类的东西-的 不是Te

  • 问题内容: 已关闭 。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗? 更新问题,使其仅通过编辑此帖子来关注一个问题。 4年前关闭。 如果您打算使用视图,那么如何确保良好的性能? 还是最好不要先使用视图,而只是将等效视图合并到您的select语句中? 问题答案: 这完全取决于您通过视图查看的内容。但最有可能减少您的精力并提供更高的性能。当SQL语句引用非索引视图时,解析器和查询优化器将

  • 问题内容: 在一个字段只有5-10个不同的可能值的情况下使用枚举是否有性能优势?如果不是,优势是什么? 问题答案: 使用以下操作会导致巨大的性能 损失: 查询中的允许值列表,例如,填充一个下拉菜单。您必须从查询数据类型,并从返回的BLOB字段中解析列表。 更改允许值的集合。它需要一条语句,该语句锁定表并可以进行重组。 我不是MySQL的粉丝。我更喜欢使用查找表。另请参阅我对“ 如何在数据库中没有枚