Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从大型MySQL数据库快速获取顶级指标?_Mysql_Performance_Lamp_Query Cache - Fatal编程技术网

从大型MySQL数据库快速获取顶级指标?

从大型MySQL数据库快速获取顶级指标?,mysql,performance,lamp,query-cache,Mysql,Performance,Lamp,Query Cache,我痛苦地意识到这可能没有什么灵丹妙药,但它正在成为一个问题。每个用户在3个表中都有数十万行度量数据,这些数据每秒更新一次 当用户登录时,我希望快速向他们提供其许多资产的顶级统计数据(即,在navi中的每个资产旁边,他们都有顶级统计数据) 我尝试了很多想法;但是请-如果有人在这方面有一些建议或经验,那就太好了。到目前为止尝试或研究过的东西:- 每隔一小时左右生成一个静态版本的top line统计数据——这在所有用户和所有资产中都是非常密集的。因此,我不确定如何定期进行这项工作 通过AJAX调用s

我痛苦地意识到这可能没有什么灵丹妙药,但它正在成为一个问题。每个用户在3个表中都有数十万行度量数据,这些数据每秒更新一次

当用户登录时,我希望快速向他们提供其许多资产的顶级统计数据(即,在navi中的每个资产旁边,他们都有顶级统计数据)

我尝试了很多想法;但是请-如果有人在这方面有一些建议或经验,那就太好了。到目前为止尝试或研究过的东西:-

  • 每隔一小时左右生成一个静态版本的top line统计数据——这在所有用户和所有资产中都是非常密集的。因此,我不确定如何定期进行这项工作
  • 通过AJAX调用stats,以便在页面加载后可以处理和填充它们(对于较大的用户,现在获取顶级统计信息可能需要10秒)。这还可以缓存会话中的统计信息,以保存每个页面加载的重做查询
  • 查询每隔30分钟运行一次,即您登录后,它将进行查询,然后希望在每次加载时(仅1/2秒)都使用查询缓存,直到下一个30分钟的间隔

第一个似乎有最多的腿,但我不确定如何做到这一点,因为只有少数用户将需要这些统计数据-这似乎是非常昂贵的为每个人做所有时间。

你是在数据仓库领域与你的设置。这意味着,并非所有NF1规则都适用。所以我的方法是使用触发器填充一个单独的统计表

  • 每隔一小时左右生成顶级统计的静态版本-这是 在所有用户和所有资产中都是密集型的。那么如何做到这一点
    通常,我不确定
  • 通过AJAX调用stats,以便对其进行处理和填充(获取) 现在的顶级统计数据最多需要10秒才能获得更大的数据 用户)一旦页面加载。这还可以将会话中的统计数据缓存到 保存每个页面加载的重做查询
  • 查询每隔30分钟运行一次,即您登录后,它将进行查询,然后 它希望每次加载时都使用查询缓存(仅1/2) 秒),直到下一个30分钟间隔
  • mySQL中的选项1和3称为mySQL,但目前不支持它们,但概念可以完成链接提供了示例

    数十万张唱片就没那么多了。良好的索引和使用将使您走得更远。遗憾的是,这个概念并没有完全实现,但是有一些变通方法,正如在提供的链接中所指出的那样


    这真的取决于顶级数据。您是否希望实时数据精确到每秒,或者10-20甚至30分钟的间隔可以接受?使用one可以计划创建/更新包含汇总数据的报告表,以便更快地进行查询。由于所有重型起重作业都已完成,因此在几秒钟的交付时间内即可获得该数据。然后,您可以将重点放在为这些表编制索引以提高性能上,而不必担心对生产表的影响

    成百上千的行并不是那么多。几百万不是那么多。这听起来像是需要在数据库级别进行优化的情况。您运行MySQL实例所使用的硬件是什么,您使用的数据库引擎是什么(MyISAM、InnoDB或其他),我们讨论的确切行数是多少,您每秒向数据库中添加多少条记录,以及有多少人使用您的数据库进行读取?一个用户可以随时访问多个“其他用户”项目,因此这就是额外的查询级别所在。。。将3个表连接在一起。我在一个小的RDS实例上运行MyISAM(上面没有其他内容,这是在一个活动的大型实例上的复制。是的,我有一种预感,您正在使用MyISAM。两个引擎(MyISAM和InnoDB)之间的差异InnoDB的一个好处是它试图将整个工作数据集存储在RAM中(由InnoDB\u buffer\u poool MySQL变量控制)。另一件事是InnoDB尝试以与MyISAM不同的方式将数据保存在磁盘上,因此顺序读取速度更快。这可能是一个交换存储引擎和增加内存缓冲区的想法,2 Gig就足够了。我现在已经尝试过了,速度更快…一半时间…但不足以让用户使用它。我可能切割连接元件的ave(从而限制此级别的数据)因为这是唯一一件能大幅削减的事情。您是否在
    SELECT
    之前添加
    EXPLAIN
    来检查您正在执行的查询?这可能是次优查询导致过多I/O的情况。事件调度程序受到我的关注,因为获取数据需要时间,所以我需要要获取和插入“新数据”,请选择14000个交互行,然后放入一个与14000相同的新行。MySQL为每个用户处理这些数据需要时间,我担心box每天都会这样做并消耗资源。在不知道这可能是什么类型的繁重工作的情况下,您很可能是对的。在大多数cas中我在一些分析函数(汇总)中使用mySQL的尝试提高了性能。每个查询/报告都需要在个案基础上进行评估,以尝试实现具有最佳设计和执行计划的SQL。正如您指出的,没有银弹。