标签: database-performance

我的mysql.general_log表太大了吗?

我刚刚升级到MySQL 5.1.6,以便利用将常规日志保存到表中的能力 - >即mysql.general_log.一旦我这样做,我立即感到惊讶,实际上有多少查询正在触及我们的系统.从第一个小时开始,我在此常规日志表中有大约40,000行.我还没有在MySQL文档中发现它是否存在一般日志表大小限制.

让这个普通日志以这个速度增长是否有问题?

如果有尺寸问题,如何处理?

是否有一些公认的做法如何处理尺寸问题?

我应该制作一个清除表格的事件并经常将数据保存到文件中吗?

非常感谢您的帮助!

mysql logging database-performance

6
推荐指数
2
解决办法
7504
查看次数

Mysql Bulk更新性能改进(当...案例时)

我有这样的查询,应该在每个MySQL操作后执行.此查询现在正在减慢页面加载速度,因为数据增加了,我做了所有事情,如正确的索引,但查询仍然相对较慢.

有没有其他方法来执行这些检查?

$query = "
UPDATE {$tprefix}wh_profg 
   SET status =
       CASE 
       WHEN 
          batchno in (
            select 
                batchno 
            from 
                {$tprefix}wh_profulldetail 
            where 
                remainingdays <= 0
          )
       THEN 
          'expired'

       WHEN 
          QC = 'rejected' and QA != 'rejected' 
            and status != 'expired' 
       THEN 
          'QC-rejected'

       WHEN 
          QA = 'rejected' and QC != 'rejected' 
            and status != 'expired' 
       THEN 
          'QA-rejected'

       WHEN 
          QA = 'rejected' and QC = 'rejected' 
            and status != 'expired' 
       THEN 
          'QA&QC-rejected'

       WHEN 
          (
            batchno in (
            select 
                batchno 
            from 
                {$tprefix}wh_profulldetail 
            where 
                available <= …
Run Code Online (Sandbox Code Playgroud)

mysql sql database-performance query-performance

6
推荐指数
1
解决办法
428
查看次数

为什么 Node JS 中的 Mysql 查询执行比直接的 Mysql 查询执行慢得多?

询问: select id, event_time from events where event_time > 1395797406712 and event_time < 1398389406712 order by event_time asc

此查询返回约 25k 行(总大小 500KB)。

当我使用驱动程序在 Node.js 中查询上述查询时node-mysql,执行大约需要 3-4 秒。(我使用console.time和console.timeEnd)

当我直接在 mySql 中查询它时,它说需要大约 200 毫秒。

是什么造成了这种巨大的差异,以及如何改进 Node.js 实现以与直接 Mysql 查询内联?

mysql performance database-performance node.js node-mysql

6
推荐指数
1
解决办法
3682
查看次数

为什么我的实体框架查询单慢?

我有一个非常简单的查询非常慢.Entity Framework Profiler表示大约需要100毫秒.

dbContext.Users.Single(u => u.Id == userId);
Run Code Online (Sandbox Code Playgroud)

尝试了一下后,我发现了一个非常相似但速度更快的查询(大约3毫秒).

dbContext.Users.Where(u => u.Id == userId).ToList().Single();
Run Code Online (Sandbox Code Playgroud)

当我比较两个查询的sql时,第二个查询不使用嵌套的SELECT而不使用TOP操作.但是我不希望它因为这两件事而快30倍.此外,使用SQL Server Management Studio执行查询时,没有可测量的差异.

当我查看执行计划时,他们都会创建一个具有100%查询成本的聚簇索引查找.而附加select和Top操作的查询成本为0%.来自EFProfiler的查询计划表明它不应该有任何区别.

在这种情况下,我该怎么做才能更好地理解查询性能?

下面是第一个查询的结果SQL.

SELECT [Limit1].[Id]                     AS [Id],
   [Limit1].[EmailAddress]           AS [EmailAddress],
   [Limit1].[FirstName]              AS [FirstName],
   [Limit1].[LastName]               AS [LastName]
FROM   (SELECT TOP (2) [Extent1].[Id]                     AS [Id],
                   [Extent1].[EmailAddress]           AS [EmailAddress],
                   [Extent1].[FirstName]              AS [FirstName],
                   [Extent1].[LastName]               AS [LastName]
    FROM   [dbo].[Users] AS [Extent1]
    WHERE  ([Extent1].[Id] = 'b5604f88-3e18-42a5-a45e-c66cc2a632d3' /* @p__linq__0 */)
           AND ('b5604f88-3e18-42a5-a45e-c66cc2a632d3' /* @p__linq__0 */ IS NOT NULL))    AS [Limit1]
Run Code Online (Sandbox Code Playgroud)

这里是第二个(更快)查询的sql.

SELECT [Extent1].[Id]                     AS [Id],
   [Extent1].[EmailAddress]           AS [EmailAddress],
   [Extent1].[FirstName] …
Run Code Online (Sandbox Code Playgroud)

sql sql-server performance entity-framework database-performance

6
推荐指数
1
解决办法
798
查看次数

通过性能改善分区?

请考虑下表:

 foo | bar
-----+-----
  3  |  1
  8  |  1
  2  |  1
  8  |  5
  6  |  5
  5  |  5
  4  |  5
  5  |  7
  4  |  7
Run Code Online (Sandbox Code Playgroud)

foo包含任何内容.列几乎bar是有序的,并且共同值的行彼此跟随.表包含约170万行,每个不同值约15行.barbar

我觉得PARTITION BY很慢,我想知道我是否可以采取任何措施来改善其性能?

我试过CREATE INDEX bar_idx ON foobar(bar)但它对性能没有影响(IRL已经在表的另一列上有一个主键).我正在使用PostgreSQL 9.3.5.

以下是EXPLAIN ANALYZE有和没有的简单查询PARTITION BY :

> EXPLAIN ANALYZE SELECT count(foo) OVER (PARTITION BY bar) FROM foobar;
                                                           QUERY PLAN                                                       
--------------------------------------------------------------------------------------------------------------------------------
 WindowAgg  (cost=262947.92..293133.35 rows=1724882 width=8) (actual time=2286.082..3504.372 …
Run Code Online (Sandbox Code Playgroud)

postgresql query-optimization database-performance window-functions

6
推荐指数
1
解决办法
1723
查看次数

长数据库查询结果与并发写入同时

我很好奇.我有这样的流程:我们有大量的数据集合/表.并且有一些select长期需要3秒的定向查询.

然而,我们期待高度并发的环境,每秒我们在数据库中获得100条新记录.

所以假设我们有一个查询,在查询开始之前,我们有1000个项目满足这些查询.查询需要3秒,每秒有50个新项目与添加到数据库的查询匹配.我的问题是 - 这是这个查询返回给我的结果(它仍然是1000或1150或介于两者之间)以及它如何依赖于不同的数据库引擎(SQL,NoSQL).Ø

这不是关于确切数字的问题,而是更多 - 为什么它将是那些数字.


看起来问题有点宽泛.让我们用MySQL,Postgres,MongoDB和Cassandra限制数据库.

sql database concurrency nosql database-performance

6
推荐指数
1
解决办法
110
查看次数

在 Oracle 中为大表的新列创建索引

我有一个包含超过 1000 万行的表。我在该表上创建了一个新列,然后尝试对其进行索引:

create index myTable_idx_myColumn on myTable(myColumn);
Run Code Online (Sandbox Code Playgroud)

该查询在大约一个小时后超时。然后我用该NOLOGGING选项重试了它,大约一个小时后成功完成。

问题解决了,对吧?不幸的是不是,因为这仅适用于开发数据库。prod 数据库有超过 2500 万行,因此理想情况下,我希望在创建索引之前找到更快的解决方案,以避免不必要的停机。

对我来说奇怪的是,根据我的理解,Oracle 默认情况下不包含null索引值(这正是我想要的)。对我来说,这意味着它应该只创建一个空白索引,因为新列中的所有值都是null创建索引时的。我知道它需要检查所有 1000 万行以确保它们是null,但即使这样似乎也不需要花费近一个小时......

有没有一种快速方法可以将索引添加到null大型表上的新列(即所有值都在其中)?

oracle indexing oracle10g database-performance

6
推荐指数
1
解决办法
1万
查看次数

某些表条件下 MySQL/MariaDB 查询慢的可能原因

在某些条件下,我遇到了一个与慢速查询有关的奇怪问题:我进行了一些测试,并且能够将问题隔离到一个名为的单个表products_description(所有表都是 MyISAM)。起初我注意到当这个表是新的(即刚刚导入)时,查询总是执行得很快(~0.3s)。但是,如果我在此特定表上执行任何这些操作,则在任何时间(甚至在导入后立即执行): CHECK, OPTIMIZE,ANALYZEREPAIR,查询都会突然减慢 x10 倍(大约需要 4.5 秒)并且始终保持缓慢。

请注意,我在运行查询时强制无缓存以确保结果正确。

只有当我在该表上执行以下任何操作时,我才能恢复性能:

1)DROP表并再次导入。

或者

2)ALTER该表中的以下任何一项:CollationCHECKSUMDELAY_KEY_WRITE。然后它以更改的值快速运行,当恢复到旧值时,性能保持快速。或者ALTER products_description FORCE可以执行以恢复性能。

即便如此,如果我对该表执行任何CHECK, OPTIMIZE,ANALYZEREPAIR操作,查询速度会下降,直到我执行 1) 或 2)

我测试的另一件事:在对表执行任何操作之前,我备份了表的文件 ( products_description.frm, products_description.MYD, products_description.MYI),运行查询,它运行得很快。然后我CHECK在表上执行,运行查询,速度慢了 10 倍,我复制了备份文件并覆盖了 3 个文件,再次运行查询,再次降低速度。

我已经将数据库压缩到了一个 ~5mb 的 zip 文件中(解压缩了 ~80mb)。如果有人想在您自己的环境中测试数据库,请告诉我,我会向您发送下载链接。我可以在几个不同的服务器上重现这个,在 MariaDB 10.1+ 和 MySQL 5.6+ 上。

这是我正在运行的 SQL 查询,您应该使用以下命令进行测试:

SELECT DISTINCT pav.products_options_values_id, 
            pav.products_options_values_name, …
Run Code Online (Sandbox Code Playgroud)

mysql database database-performance mariadb

6
推荐指数
1
解决办法
4176
查看次数

提高SQLite的每秒UPDATE性能?

我的问题直接来自这个问题,虽然我只对UPDATE感兴趣并且只对此感兴趣.

我有编写的应用程序中C/C++,这使得大量使用的SQLite,主要是SELECT/UPDATE,在一个非常频繁间隔(约20个查询每0.5至1秒)

我的数据库不大,此刻约有2500条记录,这里是表结构:

CREATE TABLE player (
   id INTEGER PRIMARY KEY AUTOINCREMENT,
   name VARCHAR(64) UNIQUE,
   stats VARBINARY,
   rules VARBINARY
);
Run Code Online (Sandbox Code Playgroud)

到目前为止,我没有使用,transactions因为我正在改进代码并希望稳定而不是性能.

然后我通过仅执行10 update查询来测量我的数据库性能,以下(在不同值的循环中):

// 10 times execution of this
UPDATE player SET stats = ? WHERE (name = ?)
Run Code Online (Sandbox Code Playgroud)

其中stats一个JSON恰好是150个字符,name是5-10个字符.

没有交易,结果是不可接受的: - 大约1整秒(每个0.096)

随着交易,时间下降x7.5倍: - 约0.11 - 0.16秒(每个0.013)

我尝试删除数据库的大部分和/或重新排序/删除列,以查看是否有任何改变,但事实并非如此.即使数据库只包含100条记录(已测试),我也会得到上述数字.

然后我试着玩PRAGMA选项:

PRAGMA synchronous = …
Run Code Online (Sandbox Code Playgroud)

c++ sqlite database-performance

6
推荐指数
1
解决办法
1894
查看次数

调整Oracle数据库以加快启动(闪回)

我正在使用Oracle Database 11.2。我遇到的情况是我FLASHBACK DATABASE经常发布。似乎一个FLASHBACK DATABASE周期会重新启动数据库实例,这大约需要花费大约30%的时间。我的设置需要7秒。

数据库很小(〜1 GB表空间),所有文件应位于I / O缓存/缓冲区中。因此,我认为瓶颈不是基于I / O的。

我正在寻找调整建议,以节省执行闪回的用户时间和/或CPU时间。

更新:

闪回序列(以及每个步骤的时序)如下:

1. Get SYSDBA connection with prelim_auth=true [15 ms]

2. SHUTDOWN ABORT; [1034 ms]

3. STARTUP (unrestricted) [1241 ms]

4. Close SYSDBA connection [2 ms]

5. Get SYSDBA connection with prelim_auth=false [18 ms]

6. ALTER DATABASE MOUNT [4073 ms]

7. FLASHBACK DATABASE TO RESTORE POINT <restore_point_name> [306 ms]

8. ALTER DATABASE OPEN RESETLOGS [1652 ms]

9. CLOSE SYSDBA connection [2 ms]
Run Code Online (Sandbox Code Playgroud)

database oracle performance database-performance flashback

6
推荐指数
1
解决办法
169
查看次数