Questions tagged «performance»

对系统是否运行良好以适合目标的评估。通常,性能是指系统随时间完成一个或一组操作的速度。


2
Redis占用了所有内存和崩溃
Redis服务器v2.8.4在具有8 GB RAM和16 GB交换空间(在SSD上)的Ubuntu 14.04 VPS上运行。但是,htop表明redis独自占用了22.4 G内存! redis-server最终由于内存不足而崩溃。Mem并且Swp两个命中率均达到100%,然后redis-server与其他服务一起被杀死。 来自dmesg: [165578.047682] Out of memory: Kill process 10155 (redis-server) score 834 or sacrifice child [165578.047896] Killed process 10155 (redis-server) total-vm:31038376kB, anon-rss:5636092kB, file-rss:0kB redis-server从其他方面重新启动可能service redis-server force-reload会导致OOM崩溃或导致内存使用量降至<100MB。 问题:为什么在redis-server崩溃之前会占用越来越多的内存?我们如何防止这种情况? 是真的,maxmemory因为redis达到maxmemory极限后,设置将无法删除,因此设置将无法工作吗? 重启redis-server后 Redis版本: Redis server v=2.8.4 sha=00000000:0 malloc=jemalloc-3.4.1 bits=64 build=a44a05d76f06a5d9 更新资料 当htop报告的内存使用量redis-server是4.4G RAM和22.6G交换,所有的钥匙,redis的占用的空间量仅为60.59636307 MB,所报告的rdbtools。这也是redis-server重启后立即占用的RAM量。 INFO ALL什么时候redis-server占用大量内存 …

4
由于“客户端处理时间”较长,因此远程SELECT语句速度较慢,但​​本地速度较快
当连接到我们的生产服务器(SQL Server 2008,功能非常强大的计算机)时,此SELECT语句将花费2秒,回吐所有字段(总共4 MB的数据)。 SELECT TOP (30000) * FROM person WITH(NOLOCK); 从同一网络上的任何其他框中(使用SQL身份验证或Windows身份验证进行连接),相同的查询需要1分钟8秒。 我正在用这个非常简单的语句进行测试,以说明它不是索引问题或与查询相关的问题。(目前,所有查询都存在性能问题...) 这些行是成块的,而不是一次全部。我立即得到第一行,然后等待1分钟以上,以使成批的行进入。 从远程框中运行查询时,这是查询的客户端统计信息: Query Profile Statistics Number of INSERT, DELETE and UPDATE statements 0 Rows affected by INSERT, DELETE, or UPDATE statements 0 Number of SELECT statements 2 Rows returned by SELECT statements 30001 Number of transactions 0 …

3
在T-SQL中使用CAST降低性能
我们有一个SQL生成器,该生成器通常针对指定的字段发出SQL条件语句(为了便于讨论,我们将其标记为myField)。 如果myField类型为NVARCHAR,我们可以将所述字段与字符串进行比较,如下所示:myField = 'foo'。 但是,这不适用于type的字段NTEXT。因此,我们必须使用强制转换进行比较 CAST(myField as NVARCHAR(MAX)) = 'foo'。如果myField类型为NVARCHAR或,则实际上可以使用NTEXT。 在已经是类型的字段上执行上述强制转换会对性能产生什么影响NVARCHAR?我希望SQL Server足够聪明,可以动态地识别myField已经存在的类型NVARCHAR(有效地将其CAST变成无操作)。

3
索引最大行大小错误
array列有上限吗? 插入数组字段时出现此错误- PG::Error: ERROR: index row size 3480 exceeds maximum 2712 for index "ix_data" 这是我的表格定义- create table test_array(id varchar(50), data text[]); ALTER TABLE test_array ADD PRIMARY KEY (id); CREATE INDEX ix_data ON test_array USING GIN (data); 我需要在数组字段上建立索引,因为我正在对其进行一些查询。

1
有关SQL Server中varchar大小调整的当前最佳实践是什么?
从存储和性能的角度来看,我试图了解确定varchar列应为多少的最佳方法。 表现 从我的研究看来只有真正需要时才应使用varchar(max);也就是说,如果该列必须容纳8000个以上的字符,那么一个原因就是缺乏索引(尽管一般而言,我对varchar字段的索引有些怀疑。尽管我对DB原理还很陌生,所以也许这是没有根据的)和压缩(更多有关存储的问题)。实际上,一般而言,当执行varchar(n).... oversizing不好时,人们似乎只建议使用所需的内容,因为查询必须考虑最大可能的大小。但也有人指出,引擎将使用指示大小的一半作为数据的平均实际大小的估计值。这意味着应该从数据中确定平均大小是多少,将其加倍,并将其用作n。但是,对于变异性非常低但非零的数据,这意味着要比最大尺寸大2倍,这似乎很多,但也许不是吗?见识将不胜感激。 存储 在阅读了行内存储与行外存储的工作原理并记住实际存储仅限于实际数据之后,在我看来,实际上,n的选择对存储几乎没有影响(除了确保它足够大以容纳所有东西)。即使使用varchar(max)也不会对存储产生任何影响。相反,如果可能的话,目标可能是将每个数据行的实际大小限制为〜8000字节。那是对事物的准确阅读吗? 上下文 我们的某些客户数据有些波动,因此,我们通常将列的宽度设置为稍稍超出其宽度(例如,将这些列增加15-20%)。我想知道是否还有其他特殊考虑?例如,与我一起工作的某人告诉我使用2 ^ n-1的大小(尽管我发现没有证据表明这是事实....) 我说的是初始表的创建。客户将告诉我们,他们将开始向我们发送一个新表,并发送示例数据(或仅发送第一个生产数据集),我们将对其进行查看并最终创建一个表来保存数据。我们希望使这张表最终能够处理将来的进口以及样品中的进口商品。但是,某些行注定会变长,因此我们填充它们。 问题是多少,是否有技术准则?

2
多列vs少表-性能明智
是的,我知道数据规范化应该是我的首要任务。 我有一个表,65列存储与列车辆数据:used_vehicle,color,doors,mileage,price等等,总共65。 现在,我可以除以和有一个Vehicle表,VehicleInterior,VehicleExterior,VehicleTechnical,VehicleExtra(全一到一个与主Vehicle表)。 假设我有大约500万行(车辆)。 在SELECT带有WHERE子句的情况下:搜索效果会更好(两种情况至少都在上索引IDs): Vehicle 65列的表格或 Vehicle表与JOINS其他四个表(均具有500万行)一起返回与Vehicle?相关的所有数据 (根据数据库引擎,考虑PostgreSQL和/或MySQL)。 真的很欣赏您以前的经验中得到的任何详细见解吗?

3
我们的生产SQL Server上的主要性能问题,该如何解决?
此问题基本上是该问题的后续问题: SQL Server 2016的奇怪性能问题 现在,我们使用此系统提高了生产率。尽管自上次发布以来,另一个应用程序数据库已添加到此SQL Server。 这些是系统统计信息: 128 GB RAM(SQL Server最大110GB内存) 4核心@ 2.6 GHz 10 GBit网络连接 所有存储均基于SSD 程序文件,日志文件,数据库文件和tempdb位于服务器的单独分区上 Windows Server 2012 R2 VMware版本HPE-ESXi-6.0.0-Update3-iso-600.9.7.0.17 VMware Tools版本10.0.9,内部版本3917699 Microsoft SQL Server 2016(SP1)(KB3182545)-13.0.4001.0(X64)2016年10月28日18:17:30版权所有(c)Windows Server 2012 R2 Standard 6.3(Build 9600 :)上的Microsoft Corporation标准版(64位) (主管) 我们的系统现在存在主要的性能问题。很高的CPU使用率和线程数: 活动监视器的等待统计信息(我知道这不是很可靠) sp_blitzfirst的结果: sp_configure的结果: 进阶伺服器设定(只有德文才可使用) 我更改了MAXDOP设置。 我知道这可能不是SQL Server本身的问题。可能是虚拟化(vmware),与网络相关(我已经测试过)或应用程序本身的问题。我只是想进一步确定它。 高ASYNC_NETWORK_IO是否会导致sqlserver进程的线程数增加?我以为它会激怒许多工作人员,因为无法关闭线程。那正确吗? 我将提供您需要的任何其他信息。预先感谢您的支持! 编辑: 的结果 …

3
如何回答为什么突然需要索引或查询的问题
我是具有3年经验的初级DBA。我们的工作是微调查询或建议开发人员应重写特定代码或需要索引。 开发团队经常问的一个简单问题是:“昨天运行良好,突然发生了什么变化?” 我们将被要求检查基础设施方面。对任何问题的第一反应总是似乎是将最大的责任归咎于基础架构,这始终是首先要进行验证的事情。 我们应该如何回答开发团队的“已更改”问题?你们曾经遇到过同样的情况吗?如果是这样,请分享您的经验。


1
估计突发使用的IO需求
我们有一个可以全天定期查询SQL数据库的应用程序。有零个活动周期或只有零个活动周期,并散布着对相对大量数据的单独请求。当这些请求出现时,主要目标是快速交付数据,次要目标是经济高效地完成数据处理。由于应用程序的性质,数据/索引不太可能会从先前的查询(不同的用户,在数据的不同部分上)缓存到RAM中。 对于使用率相对稳定的系统,我听说过经验法则以观察磁盘队列长度并使该数量保持较小。这将特别在AWS中运行,在该AWS中,我已经看到一条经验法则,即磁盘队列长度为每100 IOPS 1个是合理的。 我如何估算此类系统的IO要求?在处理单个突发查询时,磁盘队列长度是否是可靠的指标?我还应该考虑其他指标吗?


2
MySQL连接到另一个表时不使用索引
我有两个表,第一个表包含CMS中的所有文章/博客文章。其中一些文章也可能出现在杂志上,在这种情况下,它们与另一个包含杂志特定信息的表具有外键关系。 这是这两个表的创建表语法的简化版本,其中删除了一些不必要的行: CREATE TABLE `base_article` ( `id` int(11) NOT NULL AUTO_INCREMENT, `date_published` datetime DEFAULT NULL, `title` varchar(255) NOT NULL, `description` text, `content` longtext, `is_published` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`id`), KEY `base_article_date_published` (`date_published`), KEY `base_article_is_published` (`is_published`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; CREATE TABLE `mag_article` ( `basearticle_ptr_id` int(11) NOT NULL, …

3
SQL Server 2008 R2的一般内存要求
我对DBA的工作没有经验,但是我正在尝试为SQL服务器请求更多资源,并希望我可以请一些聪明的人对应该运行的内容进行粗略的估计。我怀疑IT给生产sql服务器的资源分配很低。 硬件软件: 数据库:SQL Server 2008 R2企业数据库 Windows:Windows 2008 r2 Enterprise 64位,可以肯定在VMware上运行。 处理器:Intel(R)Xeon(R)CPU E7-4860 @ 2.27GHz 2.26 GHz(2个处理器) 安装的内存:4GB 数据库文件硬盘:300GB 备份硬盘:150GB 日志硬盘:100GB 应用: 我们有3个主要数据库,它们总共增加了大约170GB的数据,在同一服务器上的Reporting Services数据库(SSRS)可能每天存储10个不同的报告(每个报告平均包含70万条记录)。我们的用户群大约有20个同时用户,其中可能有5个被认为是“资源密集型”的,可以生成数据密集型大型报告。大多数用户通过asp.net网站和报表服务器网站与数据库进行交互。此外,我们的开发人员通过直接远程连接到服务器(最多2个远程连接),在BIDS中广泛使用SSIS。最后,我们有一个相当复杂的数据仓库操作,它可能每天也通过在服务器上运行的SSIS包带来300万条记录。 当前问题: 我们的服务器长期存在超时问题,对网站的响应时间非常糟糕。我怀疑我们拥有的内存量(4GB)可能是一个很大的瓶颈。我们先前对额外内存的请求已被拒绝,我们需要执行更多查询优化来获得共同的响应。虽然我们不是sql专家,也不是(我相信您可以通过我们的设置告诉您)db admin专家,但我想确保的是,如果硬件不是硬件,那么我不会花太多时间试图挤出一点潜在的性能瓶颈。 谢谢大家避免tl!dr!

3
RESTful API的SQL数据库结构
我正在创建一个RESTful API。我正在努力决定围绕我的资源设计数据库表的最佳方法。 最初,尽管每个资源一个表都是一个不错的方法,但是现在我担心这会导致在资源链越远的地方,表成指数增长。 例如,假设我有三个资源-用户,客户,销售。用户是我api的订阅者,客户是用户客户,销售是每个客户对用户帐户的购买。 如下访问销售资源 GET /users/{userID}/clients/{clientID}/sales/{salesID} 因此,如果有10个用户,每个用户有10个客户,并且每个客户有10个销售量,那么随着我们走的资源链越远,表的大小就越大。 我相当有信心SQL可以应付大表,但是我不确定读写会如何减慢速度。上面的示例可能没有说明,但是我的api会在我们走的资源链中越来越多地进行更多的写入和读取。因此,在这种情况下,数据库中最大的表的读取和写入次数要比较小的表更多。 在运行查询之前,也有必要联接表。原因是我允许每个用户拥有一个具有相同名称的客户端。为避免获取错误的客户端数据,{userID}将users表和clients表连接在一起。销售情况也是如此。联接大表并运行会进一步降低读写速度吗?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.