标签: database-performance

这两个查询之间是否会有任何性能差异?

1)

select * from student_tbl A ,result_tbl B where
A.student_name = B.student_name and
A.student_name = "xyz" ;
Run Code Online (Sandbox Code Playgroud)

2)

select * from student_tbl A ,result_tbl B where
A.student_name = "xyz" and
A.student_name = B.student_name ;
Run Code Online (Sandbox Code Playgroud)

我知道这些查询的结果是一样的.有任何性能差异吗?如果是这样,请解释原因.

sql database-performance

2
推荐指数
1
解决办法
101
查看次数

创建SQL Server服务器性能基准查询

我正在寻找一个简单的查询来说明数据库性能

我们已经创建了一个工具来查找客户端网络/服务器/软件性能,为我们创建一个基线,让我们说他们的服务器或客户端实际上功率不足或者我们的软件在某些情况下表现不佳.

我们为什么这样做?

在我们的一个客户,我们的软件表现得非常慢,他们责备我们.在寻找可能的软件缺陷之后,我们发现问题实际上是他们的网络速度,它只是非常慢.(网络流量通过100英里以外的VPN路由)

我需要什么

我正在寻找一个"简单"的查询来设置Microsoft SQL Server数据库的基准性能.

最好是一个查询,可以说数据库是真的慢/快还是只是工作正常.

我创建了一个简单的查询:

select top 50000 * from BigTable 
where YEAR(startdate) = 2011 or YEAR(startdate) = 2010 
order by table.startdate desc
Run Code Online (Sandbox Code Playgroud)

这里的BigTable实际上是我们的软件会经常查询以进行一些复杂的更新计算的东西.

调用此查询(100次)并从客户端计时它给我们一个体面的服务器性能估计.但我宁愿执行一个更加面向计算的查询,其中包含一些复杂的连接,实际上只是简单的选择,而不是服务器性能.

performance sql-server-2008 database-performance

2
推荐指数
1
解决办法
3094
查看次数

当具有相同名称的表已经存在时,使用mysql innodb重命名大型表的最佳实践

我使用Mysql 5.5 .. + INNODB和Windows Server。

案例(先简单然后再案例):

我有2个表1GB,名称new_carcar表1GB。

我每隔10小时carnew_car表格替换表格,而不是手动(按代码自动)-快速完成(实际网站数据)很重要。

我读了(说在innodb中删除了它的问题):http : //www.mysqlperformanceblog.com/2011/02/03/performance-problem-with-innodb-and-drop-table/

解决方案1:

DROP TABLE car;
RENAME TABLE new_car TO car;
Run Code Online (Sandbox Code Playgroud)

解决方案2(最后放置-可能不会阻止表访问在放置期间发生的访问):

RENAME TABLE car TO temp_car;
RENAME TABLE new_car TO car;
DROP TABLE temp_car;
Run Code Online (Sandbox Code Playgroud)

解决方案3(截断快速删除表并创建空表,然后在执行删除操作后应该很快):

TRUNCATE TABLE car;
DROP TABLE car;
RENAME TABLE new_car TO car; 
Run Code Online (Sandbox Code Playgroud)

解决方案4:

RENAME TABLE car TO temp_car;
RENAME TABLE new_car TO car;
TRUNCATE TABLE temp_car;
DROP TABLE temp_car;
Run Code Online (Sandbox Code Playgroud)

哪种解决方案是最好的,为什么或请写其他更好的解决方案?

谢谢

mysql sql performance sqlperformance database-performance

2
推荐指数
1
解决办法
6131
查看次数

为什么autovacuum进程无法恢复内存

我只是经历了一个场景,我根本没有得到我的问题的线索.

我有一个名为name的表(列名和时间).该表每隔一分钟插入许多行.并且这些插入的记录将在特定时间间隔内删除.所以,最后我停止插入数据并删除了表中的所有行.

我的数据库版本细节

impss=# SELECT  version();
                                           version                                            
----------------------------------------------------------------------------------------------
 PostgreSQL 8.3.7 on i486-pc-linux-gnu, compiled by GCC gcc-4.3.real (Debian 4.3.2-1.1) 4.3.2
(1 row)
Run Code Online (Sandbox Code Playgroud)

但是当我发出查询以查找表的大小时,我仍然得到一些大小.

impss=# SELECT  pg_size_pretty( pg_total_relation_size('names')) ;
 pg_size_pretty 
----------------
 1504 kB
(1 row)
Run Code Online (Sandbox Code Playgroud)

第一个问题为什么它仍然显示一些大小虽然我删除了表中的所有记录.

要查找上次autovacuum何时完成,我已发出以下查询:

当前时间是

impss=# select now(); 
               now                
----------------------------------
 2012-11-08 20:21:10.550434+05:30
(1 row)

impss=# SELECT last_autovacuum  from pg_stat_user_tables where relname='names';
         last_autovacuum          
----------------------------------
 2012-11-08 17:51:31.995618+05:30
Run Code Online (Sandbox Code Playgroud)

第二个问题:为什么在此之后没有执行autovacuum进程,尽管我的数据库不是繁忙的,我已经停止了对该表的所有事务.

所以,请告诉我是否必须进行任何特定配置才能进行频繁的真空处理,以便在记录被删除后我可以取回所有空间.

database postgresql memory-management database-performance

2
推荐指数
1
解决办法
865
查看次数

使用分区或单独的数据库进行表扩展?

假设我有一张表(让我们称之为BigTable),每天可以体验5,000,000个INSERTS(可能只有SELECT).插入的每行约为50kb.

这些每日INSERT分为5个客户端(该表有一个FK调用ClientID).无需跨多个客户端选择或加入数据.

随着这个表的增长,我担心数据库性能,所以我提出了两个解决方案.

解决方案1:

  • 分区BigTableClientID
  • 将每个分区存储在服务器上的单独硬盘上(使用Azure博客存储).
  • 将所有1个月大的数据(存档数据,但仍需要查询)分区到另一组READONLY分区中.

实质上,这意味着他们自己的存储设备上的以下分区:

  • 主要(所有数据除外BigTable)
  • ClientA BigTable(每天5,000,000行/ 5个客户x 30天= 30,000,000行)
  • ClientB BigTable(30,000,000行)
  • ClientC BigTable(30,000,000行)
  • ClientD BigTable(30,000,000行)
  • ClientE BigTable(30,000,000行)
  • ClientA的BigTable存档
  • ClientB的BigTable存档
  • ClientC的BigTable存档
  • ClientD的BigTable存档
  • ClientE的BigTable存档

归档表中的行数将为(5,000,000)x(以天为单位的DB年龄) - (30,000,000).这仍然是一个巨大的表,但只会用于绘制奇怪的报告.

SQL Server将托管在14GB,8core Azure VM上.

解决方案2:

另一种选择是为每个客户端托管单独的数据库.这意味着每个人都拥有自己专用的SQL Server机器.归档数据仍将进行分区.

由于数据的物理分离,此选项不是最佳选项.必须管理多个数据库的更新可能非常有问题.为每个客户端建立单独的数据库连接也是开发人员的考虑因素.

任何人都可以就这些选择提出建议吗?

sql-server database-design azure database-performance database-partitioning

2
推荐指数
1
解决办法
2059
查看次数

MySQL和PHP的多个查询性能

我问你一些建议.我有一个网站,我有视频,用户可以给他们竖起大拇指和拇指向下.他们保存在一张桌子里.目前我有三个SQL查询来获取竖起大拇指的数量,拇指向下的数量以及登录用户给出的内容(如果他这样做).

而现在我正在考虑提高性能,但我不知道什么是更好的,因为我想保持查询的数量.

方法1)保持这三个查询:

SELECT COUNT(*) as rowcount FROM `videolikes` WHERE `vid` = 'gt6w_RZfs5yx' AND `thumb` = '1' LIMIT 1
SELECT COUNT(*) as rowcount FROM `videolikes` WHERE `vid` = 'gt6w_RZfs5yx' AND `thumb` = '0' LIMIT 1
SELECT * FROM `videolikes` WHERE `vid` = 'gt6w_RZfs5yx' AND `uid` = '1' LIMIT 1
Run Code Online (Sandbox Code Playgroud)

方法2)使用子查询进行一次查询(类似的东西(它在这里不起作用)):

SELECT *, (SELECT COUNT(*) as rowcount FROM `videolikes` WHERE `vid` = 'gt6w_RZfs5yx' AND `thumb` = '1' LIMIT 1) as thumbsups, (SELECT COUNT(*) as rowcount FROM `videolikes` WHERE `vid` = 'gt6w_RZfs5yx' …
Run Code Online (Sandbox Code Playgroud)

php mysql query-optimization database-performance

2
推荐指数
1
解决办法
122
查看次数

使用join进行更新需要很长时间

我在更新表时遇到问题.我正在运行以下查询:

UPDATE Table1 SEt entrena = c.Count 
FROM Table1 AS p INNER JOIN (
SELECT e.EmplID, COUNT(e.EmplID ) as Count 
FROM Table2 AS e WHERE e.Start >= @Start AND e.Start <=@End 
GROUP BY e.EmplID ) AS c ON p.EmplID = c.EmplID
WHERE P.Date  = '2050-12-31'
Run Code Online (Sandbox Code Playgroud)

Table1有12000行,连接中的select只有51行,但更新大约需要2分钟,但是如果我删除where clase p.date = '2050-12-31',则更新只需不到一秒钟.我无法弄清楚如何解决它.我正在使用SQL Server 2008.

两个表都没有索引.

sql t-sql sql-server-2008 database-performance

2
推荐指数
1
解决办法
1022
查看次数

在MongoDB中批量插入的最佳方式

在MongoDB中批量插入文档有两种方法:

  1. 传入一系列文档db.collection.insert,或
  2. 使用Bulk.insert- 自v2.6起可用

哪一个更高效?我假设后者在单个批量写操作块中与其他写操作结合使用时更方便,因此第一个更高效.但有没有人做过任何测试或有这方面的逻辑或经验证据?

performance bulkinsert performance-testing mongodb database-performance

2
推荐指数
1
解决办法
740
查看次数

SQL Server长时间运行查询需要数小时但使用低CPU

我在Windows Server 2012下的SQL Server 2012中运行一些存储过程,这些存储过程位于具有32 GB RAM和8个CPU内核的专用服务器中.CPU使用率始终低于10%,RAM使用率为80%,因为SQL Server分配了20 GB(32 GB).

有些存储过程在某些日子和其他日子需要4小时,几乎相同的数据需要7或8小时.

我使用限制性最小的隔离级别,所以我认为这不应该是一个锁定问题.数据库大小约为100 GB,最大的表有大约500万条记录.

这些进程具有批量插入,更新和删除(在某些情况下,我可以使用truncate来避免生成日志并节省一些时间).我在一个表中进行了一些全文搜索查询.

我完全控制了服务器,所以我可以更改任何配置参数.

我有几个问题:

  1. 是否可以使用并行性来提高查询的性能?
  2. 为什么CPU使用率如此之低?
  3. 配置SQL Server的最佳实践是什么?
  4. 审核服务器的最佳免费工具是什么?我尝试了一个名为SQL Server 2012 BPA的Microsoft,但该报告始终为空,没有任何警告.

编辑:我检查了日志,我发现了这个:

2015年3月18日11:09:25,spid26s,未知,SQL Server遇到82次发生的I/O请求需要超过15秒才能完成文件[C:\ Program Files\Microsoft SQL Server\MSSQL11数据库[tempdb](2)中的.HLSQLSERVER\MSSQL\DATA\templog.ldf].OS文件句柄为0x0000000000000BF8.最新的长I/O的偏移量为:0x00000001fe4000

sql-server server-configuration long-running-processes database-performance sql-server-2012

2
推荐指数
1
解决办法
7872
查看次数

可以在Oracle中禁用SQL执行计划吗?

我遇到一种情况,即Oracle为给定查询创建多个执行计划。大多数情况下,它会选择性能良好的特定产品。但是,有时它选择一个包含笛卡尔连接的连接,这是非常错误的。如果我们删除笛卡尔联接计划并使用其他计划之一运行查询,则该查询执行良好,这向我暗示了基础数据确实不需要笛卡尔。

我们曾尝试收集统计数据并摆正直方图,但最终,笛卡尔联接执行计划似乎又回来了,并被间歇性地使用(有时需要数周或数月)。

在Oracle中是否可以禁用特定的执行计划?我们不能只是删除它,因为它似乎又回来了,但是将其保留并禁用它应该可以解决,但是我真的不知道该怎么做或是否有可能。

sql database oracle database-performance sql-execution-plan

2
推荐指数
1
解决办法
5650
查看次数