Questions tagged «best-practices»

最佳实践通常和非正式地被认为是随着时间的推移显示出优于通过其他方式实现的方法和过程。

2
更改“ sa”密码是否需要重新启动SQL(在混合模式下)?
我们发现一个SQL“ sa”帐户的使用方式不应该被使用,因此我们正在更改所有SQL实例上的sa密码。 (我们有以混合身份验证模式运行的SQL 2005至2017服务器。所有用户和应用程序都应使用域帐户或非sa SQL帐户进行连接。我一直在监视,但未发现任何其他应用程序,用户或非-使用sa帐户的内部sps。) 几个问题: Q1:更改sa密码是否需要重新启动SQL? 我发现一些参考资料说更改sa帐户密码后需要重新启动SQL服务: DBA SE:更改sa密码 SQLAuthority:使用Management Studio更改SA登录的密码 真的吗?还是仅当我更改身份验证模式时?还是仅当我以sa常规身份登录时? 这个SQL Server Central线程甚至建议更改它可能会影响现有的SQL代理作业和其他内容。这是一个问题吗?还是仅当有人将SA帐户硬编码到SSIS包或其他内容中时? (如果很重要,我们将域帐户用于SQL服务和SQL代理服务,并将域代理帐户用于调用SSIS包或PowerShell脚本的作业。) Q2:我可以以“正常”方式更改sa密码吗? 我可以像重设其他帐户一样重设吗?使用SSMS,或更可能通过以下方式: ALTER LOGIN sa WITH PASSWORD = 'newpass'; 还是我必须进入单用户模式或需要计划停机的时间?(请注意,我将通过域帐户运行此文件,而不是以“ sa”身份连接。) 问题3:我们是否应该尝试定期进行此密码轮换?或仅在我们发现问题时? 这是推荐的“最佳实践”吗?

1
授予对数据库所有表的访问权限
我最近想与服务器的一个用户共享定期访问权限和我认识到,一个简单的CREATE USER和GRANT ALL ON DATABASE命令没有让他运行一个简单SELECT的数据。 我想将给定数据库中所有表的权限授予指定用户,但是我不确定授予他对整个模式的访问权限是否是最好的主意,public因为我不知道是否允许某种特权升级。还有其他办法吗?

2
MongoDB:在应用程序服务器上共同定位mongos进程
我想问一个有关本文档中描述的最佳实践的问题: http://info.mongodb.com/rs/mongodb/images/MongoDB-Performance-Best-Practices.pdf 使用多个查询路由器。使用跨多个服务器的多个mongos进程。常见的部署是将mongos进程共定位在应用程序服务器上,从而允许应用程序和mongos进程之间进行本地通信。mongos进程的适当数量将取决于应用程序和部署的性质。 有关我们的部署的背景知识。我们有很多应用服务器节点。它们每个都使用无状态RESTful WS运行一个基于JVM的进程。正如最佳实践所建议的那样,每个单个应用程序服务器节点都运行自己的mongos进程,这意味着JVM进程的数量始终等于进程的数量mongos。 所有mongos进程都连接到3台配置服务器和几个mongo分片(每个分片内都有副本集)。即使我们使用分片部署,也没有真正分片集合。实际上,我们有大量的数据库,这些数据库在创建时就分布在所有分片上(这是目前分片的主要用例)。 由于最佳实践还表明“适当的mongos进程数量将取决于应用程序和部署的性质”,我开始怀疑我们的用法mongos实际上是否合适,或者让我们拥有几个专用mongos节点是否更好?我们的应用服务器无需mongos本地运行即可连接到它们。 您对决定mongos与应用程序服务器实例数量或MongoDB集群大小相关的多少个实例合适的最佳方法有何看法? 最近,我们开始研究无状态Web服务的集群管理,我的意思是指诸如Docker,Apache Mesos和Kubernetes之类的工具。如果我们使用的是Docker,那么通常不建议在容器内运行多个进程。考虑到这一事实,要确保应用程序服务器容器和mongos容器始终位于同一物理节点上并具有相同数量的进程,将变得非常困难。这使我想知道这种最佳实践是否仍然适用于我刚刚描述的集群体系结构。如果没有,您能否建议mongos在这种体系结构中定位和部署流程的更好方法是什么?

2
将列别名放在列定义的开始或结尾之间有什么区别吗?
我一直都将列别名写为 SELECT 1 as ColumnName 但是今天遇到了一个使用了 SELECT ColumnName = 1 这两个查询的执行方式有何不同?还是在DBA中有关于使用哪个标准的标准? 我个人认为,第二个会更容易阅读/(很好的例子保持更长的列定义在这里从这篇文章),但我从来没有见过,所以今天很奇怪,之前使用的第二语法,如果有某种原因,我不应该使用它。

2
对多个查询列使用相同的CASE WHEN条件
是否存在一种“更好”的方式来重写SELECT子句,其中多个列使用相同的CASE WHEN条件,以便仅检查条件一次? 请参见下面的示例。 SELECT CASE testStatus WHEN 'A' THEN 'Authorized' WHEN 'C' THEN 'Completed' WHEN 'P' THEN 'In Progress' WHEN 'X' THEN 'Cancelled' END AS Status, CASE testStatus WHEN 'A' THEN authTime WHEN 'C' THEN cmplTime WHEN 'P' THEN strtTime WHEN 'X' THEN cancTime END AS lastEventTime, CASE testStatus WHEN …

1
连接不同地理区域的数据库的最佳实践
我们将在不同的国家/地区设置SQL Server。我们需要链接它们,但不必具有直接链接(如链接服务器中的链接)。换句话说,它们可以松散耦合。 通过VPN连接它们并将它们作为链接服务器,还是通过Web服务使用松散耦合,是更好的选择? “更好”是指稳定。

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
如果没有计划卸载,是否可以删除Setup Bootstrap文件夹中的Log and Update Cache文件夹?
我在笔记本电脑上安装了多个版本的SQL Server(用于测试)(2012年,2014年,2016年和2017年)。几天前,我注意到有一个文件夹,其中包含更新(SP,CU)中文件的先前版本。在所有版本中,实际上占用了大量空间: (在C:\ Program Files(x86)\ Microsoft SQL Server \中) 110\Setup Bootstrap\Log - 91.8 MB (818 files) 110\Setup Bootstrap\Update Cache - 608 MB (2,382 files) (下面的所有文件夹都位于:C:\ Program Files \ Microsoft SQL Server \) 110\Setup Bootstrap\Log - 1.18 GB (3,715 files) 110\Setup Bootstrap\Update Cache - 9.58 GB (14,766 files) 120\Setup Bootstrap\Log - …

4
为什么在单个数据库中混合列排序规则被认为是不好的?
有两个原因促使我问这个问题: tSQLt当存在具有非默认归类的列时 ,T-SQL测试框架tSQLt认为它是“高严重性”问题。测试的作者指出以下内容: 我不建议每个字符串列都应具有与数据库默认排序规则匹配的排序规则。相反,我建议,如果有所不同,应该有充分的理由。 但是,如上所述,失败测试的严重性被认为是很高的。 Octopus Deploy 在配置Octopus Deploy Server时,在OctopusServer-instance初始化期间,安装失败并出现致命错误。与错误消息相关的文章没有解释为什么这样做是必需的,而只是指出,从(包括)Octopus 3.8版开始,它将成为将来部署的要求。 作为附带说明,RedGate的CI工具包DLM自动化套件支持具有多种排序规则的部署,而不会产生任何抱怨。 对我而言,将所有列排序规则保留为数据库默认值的建议似乎更像是准则或最佳实践。为什么有些人将其视为如此严重的错误?

4
帮我为SQL Server 2008实例选择RAID级别组合
我将从头开始重建一台IBM 3400服务器。该服务器专用于在Windows 2008 R2上运行的SQL Server 2008实例。 我将进行新的RAID配置。我的机器内部有6个SCSI 73 GB驱动器和一个IBM ServerRAID 8K控制器。设置RAID级别的好方法是什么?我的控制器上应该有两个,三个还是一个字段? 我正在考虑提出以下解决方案之一: 使用所有磁盘并创建RAID 10池。 将4个磁盘用于RAID 1e池,并将其用于存储数据库数据和OS,将其他2个磁盘用于RAID 0池,并将其用于存储数据库日志。 其他组合。 较大的条带单元尺寸更好吗? 该服务器将成为复制数据库的订阅者。它的主要任务是报告和数据检索,仅复制代理进行写操作。数据库的大小约为90 GB。


2
未使用的索引最佳做法
根据此查询,如果我发现总读取量很少(非常接近0或0,例如1或2),而用户更新量则较高或中等(我无法通过此查询找到插入或删除的内容),行数很大时,理论上我应该删除索引。 SELECT DISTINCT OBJECT_NAME(s.[object_id]) AS ObjectName , p.rows TableRows , i.name AS [INDEX NAME] , (user_seeks + user_scans + user_lookups) AS TotalReads , user_updates UserUpdates FROM sys.dm_db_index_usage_stats s INNER JOIN sys.indexes i ON i.[object_id] = s.[object_id] AND i.index_id = s.index_id INNER JOIN sys.partitions p ON p.object_id = i.object_id WHERE OBJECTPROPERTY(s.[object_id],'IsUserTable') …


2
在订单表中存储帐单地址最佳做法
有人可以帮助我了解此用户对CustomerLocation表的回答。我真的想要一种在订单表中存储地址的好方法。 我要寻找的是如何设置地址,以便在编辑地址时,订单不会受到客户更新其地址或重新安置地址的影响。 就目前而言,我的架构类似于: Person |EntityID| EntityAddress |EntityID|AddressID| Address |AddressID|AddressType|AddressLine1|AddressLine2| Order |OrderID|BillingAddressID|

3
在数据库中存储时间(以毫秒为单位)
关于在数据库中存储“时间”的一个简单问题。我正在记录用户运行时间,其格式为00:00:00:00(小时,分钟,秒,毫秒)。 我本来打算将其存储为,TIME但是后来我意识到MySQL不支持这种类型的毫秒。 我将存储从用户秒表获取的实际时间,而不是他们运行并完成的时间(这将在插入之前进行计算)。 最好使用哪种字段类型?我在想double或者float,但是我不确定是否行得通?

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.