数据库管理员

希望提高数据库技能并向社区中的其他人学习的数据库专业人员的问答


5
如何在MySQL中估算/预测表的数据大小和索引大小
我正在研究很多博客和论坛,但找不到任何准确答案,因此我发现估算表大小的最佳方法是什么? 例如,我们有一个带有InnoDB引擎的表City,可以说在未来(未来1年)它将有100万条记录,因此在此期间该表的估计数据大小和索引大小是多少。 mysql> desc City; +-------------+----------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------------+----------+------+-----+---------+----------------+ | ID | int(11) | NO | PRI | NULL | auto_increment | | Name | char(35) | NO | | | | | CountryCode | char(3) | NO | …
26 mysql  innodb 


7
为什么要使用innodb_file_per_table?
有许多文章夸大了(当然是恕我直言)对的需要innodb_file_per_table。我知道使用innodb_file_per_table,应该可以更好地控制各个表;例如分别备份每个表。但是,关于获得更好性能的要求令人怀疑。 在我的测试中,在性能没有差异innodb_file_per_table,并ibdata1为60GB的数据库。当然,这是对普通查询的简单测试,现实生活中复杂查询的情况可能有所不同(这就是我问这个问题的原因)。具有64位linux ext4可以有效处理大文件。 使用innodb_file_per_table,需要更多的磁盘I / O操作;这对于复杂的JOINs和FOREIGN KEY约束非常重要。 表空间在单个共享ibdata;单独表的专用表空间如何节省磁盘空间?当然,使用释放每个表的表空间更为容易ALTER,但是这仍然是一个昂贵的过程(使用表锁)。 问题:是否innodb_file_per_table对更好的mysql性能有影响?如果是,为什么?

7
尝试查找值最后一次更改的时间
我有一个具有ID,值和日期的表。该表中有许多ID,值和日期。 记录会定期插入此表中。ID将始终保持不变,但有时值会更改。 如何编写一个查询,该查询将为我提供ID以及最近一次更改值的时间?注意:该值将始终增加。 从此样本数据中: Create Table Taco ( Taco_ID int, Taco_value int, Taco_date datetime) Insert INTO Taco Values (1, 1, '2012-07-01 00:00:01'), (1, 1, '2012-07-01 00:00:02'), (1, 1, '2012-07-01 00:00:03'), (1, 1, '2012-07-01 00:00:04'), (1, 2, '2012-07-01 00:00:05'), (1, 2, '2012-07-01 00:00:06'), (1, 2, '2012-07-01 00:00:07'), (1, 2, '2012-07-01 00:00:08') …

3
模拟死锁的代码
我正在测试我的应用程序,我需要一些代码来稳定地模拟数据库站点上的死锁(如果可能,请使用sql脚本)。 谢谢。 添加: 重现仅涉及一张表的死锁

2
为什么子查询将行估算值减少到1?
考虑以下人为但简单的查询: SELECT ID , CASE WHEN ID <> 0 THEN (SELECT TOP 1 ID FROM X_OTHER_TABLE) ELSE (SELECT TOP 1 ID FROM X_OTHER_TABLE_2) END AS ID2 FROM X_HEAP; 我希望此查询的最终行估计等于X_HEAP表中的行数。无论我在子查询中执行的操作与行估计无关紧要,因为它无法过滤出任何行。但是,在SQL Server 2016上,由于子查询,我看到行估计减少为1: 为什么会这样?我该怎么办? 使用正确的语法很容易重现此问题。这是一组可以做到的表定义: CREATE TABLE dbo.X_HEAP (ID INT NOT NULL) CREATE TABLE dbo.X_OTHER_TABLE (ID INT NOT NULL); CREATE TABLE dbo.X_OTHER_TABLE_2 …

8
为什么允许所有人都使用sa登录名是一种不好的做法?
甚至Microsoft 都不鼓励使用SQL Server身份验证模式,但是我们的应用程序要求使用它。 我已经读到,最好的做法是不让用户sa直接使用登录名,而是使用Windows身份验证并允许这些帐户(或帐户组)具有sysadmin特权。 这根本不是一回事吗?优点/缺点是什么? 最佳实践如何提高SQL Server实例的安全性? 这仅适用于生产实例还是我们的内部开发实例?

1
由于文件路径错误,备份时SQL Server 2017崩溃
我试图还原数据库,而SQL Server一直崩溃。我会在SSMS中收到一条消息,说存在网络传输错误(由于崩溃导致连接断开)。我检查了日志,发现没有什么比SQL Server意外关闭更重要。然后,我将不得不重新启动该服务。 我将问题缩小到GUI试图运行的脚本。问题是当进行尾日志备份时,备份文件的路径错误。它应该是D:\mapbenefits\... BACKUP LOG [mapbenefits] TO DISK = N'D:mapbenefits_LogBackup_2019-02-21_13-58-24.bak' WITH NOFORMAT, NOINIT, NAME = N'mapbenefits_LogBackup_2019-02-21_13-58-24', NOSKIP, NOREWIND, NOUNLOAD, NORECOVERY , STATS = 5 我有两个问题。 如何解决此问题?我尝试进入服务器设置,并且备份路径D:没有斜杠。如果我添加斜杠,则gui会将其删除。这是SSMS v17.9.1。我可以选择,D:\mapbenefits\并且可以,但是我想要D:\DATABASE\... 这是错误吗?SQL服务器是否应该仅由于路径输入错误而崩溃?修复文件路径后,它就没有问题了。我可以随时通过复制文件路径来重现。 如果我运行查询以检查版本,则会得到CU13,但是如果进入设置,则会看到版本14.0.1000.169。 看起来这是一个错误并且可以复制,所以我将其发布到了这里:https : //feedback.azure.com/forums/908035-sql-server/suggestions/36920542-incorrect-filepath-with-backup-log-command-原因

3
是否已从SQL Server 2016安装媒体中删除Management Studio?
我只是尝试安装SQL Server 2016 Enterprise,但我注意到默认情况下未安装Management Studio。我还注意到安装指南中有指向SSMS的单独链接,该链接指向https://msdn.microsoft.com/zh-cn/library/mt238290.aspx 做出此决定的原因是什么? 在上述URL上注明了以下内容: 此普遍可用的SSMS版本是免费的,不需要安装和使用SQL Server许可证。 也许就是这个吗?
25 sql-server  ssms 

1
顺序-NO CACHE vs CACHE 1
在SQL Server 2012+中,SEQUENCE声明使用NO CACHE和声明使用之间有区别CACHE 1吗? 顺序1: CREATE SEQUENCE dbo.MySeqCache1 AS INT START WITH 1 INCREMENT BY 1 MINVALUE 1 MAXVALUE 9999 NO CYCLE CACHE 1; GO 顺序2: CREATE SEQUENCE dbo.MySeqNoCache AS INT START WITH 1 INCREMENT BY 1 MINVALUE 1 MAXVALUE 9999 NO CYCLE NO CACHE; GO 两者之间有什么区别吗?在SQL Server 2012+环境中使用时,它们的行为会有所不同吗?

4
我应该明确拒绝不应该更新的列吗?
我习惯在非常安全的环境中工作,因此我将权限设计为非常精细。我通常要做的一件事是显式地DENY使用UPDATE不应该更新的列的功能。 例如: create table dbo.something ( created_by varchar(50) not null, created_on datetimeoffset not null ); 设置值后,永远不要更改这两列。因此,我明确DENY了UPDATE他们的权限。 最近,在一个团队会议中,开发人员提出了一个观点,即确保字段永远不会更新的逻辑应该包含在应用程序层而不是数据库层中,以防“他们出于某种原因需要更新值”。对我来说,这听起来像是典型的开发者心态(我知道,我曾经是一个!) 我是公司的高级架构师,我一直致力于使应用程序正常运行所需的最少特权。所有权限都会定期审核。 在这种情况下,最佳做法是什么?

4
带问号的蓝色图标-这是什么意思?
SQL Server实例是可访问的,似乎还不错。 Microsoft SQL Server 2016(SP1-CU2)(KB4013106)-13.0.4422.0(X64) 2017年3月6日14:18:16版权所有(c)Windows Server 2012 R2 Standard 6.3(Build 9600)上的Microsoft Corporation Enterprise Edition(64位) :)(管理程序) 但是白色问号是什么意思? 这些图标在我刷新时不会消失。我是sql server内部的sysadmin,外部是该框中的管理员。 我注意到的另一件事,您可以在下面的图片中看到。这是2个不同的Management Studio会话。 在最上面的一个,我以我自己的身份登录DBA and sysadmin,在第二个上,我与Management Studio一起run as a different user使用,并且我使用了用于复制的域帐户,而不是sysadmin。 第二台也有blue icon此服务器和其他服务器中的,而我的是正常的绿色服务器。

1
PostgreSQL DELETE FROM失败,并显示“错误:尝试删除不可见的元组”
此问题是从“服务器故障” 迁移而来的,因为可以在数据库管理员堆栈交换中回答。 迁移 3年前。 错误 尝试删除包含无效时间戳记的元组 DELETE FROM comments WHERE date > '1 Jan 9999' OR date < '1 Jan 2000' OR date_found > '1 Jan 9999' OR date_found < '1 Jan 2000'; 结束于 ERROR: attempted to delete invisible tuple 有从2009年的邮件列表讨论完全相同的错误信息,其中OP有它固定的,但我没有发现他是如何做到的或可能是什么导致了这种错误的解释。 由于缺乏对Google的欢迎以及对PostgreSQL的了解有限,我感到无助。 导致腐败的原因 当OS内核崩溃时,我有一个在Debian 8上运行的PostgreSQL 9.5.5服务器(〜4TB数据,所有默认设置,除了增加的内存限制)–大概是在重建交换所在的/ dev / md1时。在此之前,PostgreSQL用400GB的日志文件吞噬了几乎所有磁盘空间。操作系统再也不会启动,磁盘检查还可以,所以我已经从LiveCD启动,并将每个块设备备份到了映像,以防万一。我已经成功地从/ dev …

3
样本大小的异常行为可用于统计信息更新
我一直在研究抽样阈值,并使用SQL Server(2012)的统计信息更新,并注意到一些奇怪的行为。基本上,在某些情况下,即使使用相同的数据集,采样的行数似乎也有所不同。 我运行此查询: --Drop table if exists IF (OBJECT_ID('dbo.Test')) IS NOT NULL DROP TABLE dbo.Test; --Create Table for Testing CREATE TABLE dbo.Test(Id INT IDENTITY(1,1) CONSTRAINT PK_Test PRIMARY KEY CLUSTERED, TextValue VARCHAR(20) NULL); --Insert enough data so we have more than 8Mb (the threshold at which sampling kicks in) INSERT INTO …

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.