我有一个非常频繁更新的表,其中包含 2.4 亿行(并且还在增长)。每三小时插入 150 万行,删除 150 万行。当我将集群移动到 SSD 时,批量插入(使用复制)时间从 22 分钟减少到 2.3 分钟。删除时间也得到改善。我计划每两小时或每小时进行一次批量更新。
虽然现在的性能(在 SSD 之后)与更频繁的更新兼容,但我读过一些关于 SSD 死亡的恐怖故事,因为 NAND 耐久性有限加上写放大。由于 SSD 价格昂贵,我想尽可能地将它的消亡推迟到未来。因此我的问题是:在删除和随后的真空中磁盘文件到底发生了什么?我猜有两个磁盘写入,一个将行标记为已删除,另一个在清理时将其标记为可覆盖。如果不是删除和清空,而是在每次批量插入/删除时对表进行分区创建和删除表,我会尽量减少 SSD 的磨损吗?
有人告诉我,如果攻击者可以访问未加密的 .bak 文件,他们就可以访问数据。
所以让我们看看这个场景:
OPEN SYMMETRIC KEY MySymetricKey DECRYPTION
BY CERTIFICATE MyCertificate
Run Code Online (Sandbox Code Playgroud)
注意 - 这里没有密码。
然后我们通过以下方式加密我们的表:
UPDATE tbl1
SET namePAss = ENCRYPTBYKEY(KEY_GUID('MySymetricKey'),name)
GO
Run Code Online (Sandbox Code Playgroud)
现在假设黑客得到了我的bak文件。为了查看数据(在他自己的计算机和 sql-server 中),他所要做的就是:
SELECT
convert( NVARCHAR(max), decryptbykey(namePAss))
FROM tbl1
Run Code Online (Sandbox Code Playgroud)
他还能访问数据吗?
我们的企业标准之一是为用户表/索引使用单独的文件组/文件。这被设置为默认值,因此无需限定 CREATE TABLE 语句。
所以它看起来像这样
这里的任何人都可以帮助我理解为什么强制执行此操作的原始理由吗?
我会坦白说我认为这是巫毒教。上午我错了......?
编辑:我知道如何使用文件组来分离索引/分区/存档,以及如何逐步恢复。这个问题是关于在同一卷上为系统表使用单独的文件组。
我有一个状态机,它需要为不同的用户推送/弹出一些文件名。我传统上会使用堆栈作为数据结构的选择,但这需要使用数据库来完成,因为我没有办法在传入的 Web 请求之间保留数据结构。
我想知道使用数据库实现堆栈功能的好方法是什么?
我需要支持:
编辑:
我正在对一个想法进行原型设计,因此我将 sqlite3 与 python 一起使用。
谢谢!
什么是使存储过程足够健壮以使其可以很好地扩展并包含错误处理的好方法?
此外,在存储过程中处理多个错误场景并拥有一个智能反馈系统来向调用应用程序返回有意义的错误信息的最佳方法是什么?
如何在 SQL Server Management Studio 中修改用户界面语言?
例如,如果我用英语安装,但希望用日语查看(仅举一个可能的例子)。
我在非 [English-as-a-first-language] 环境中运行此环境,并且希望我的所有窗口都以我的自然语言阅读。(我特定的自然语言并不重要,是吗?)
如何为 SQL Server 重写最初为 Oracle 编写的触发器?
这是我的 Oracle 触发器代码:
CREATE OR REPLACE TRIGGER P000KUL_TEST
BEFORE
INSERT
ON P000KUL
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
BEGIN
SELECT TO_CHAR(SYSDATE, 'dd/mm/RRRR') INTO :NEW.SYSTEM_DATE FROM DUAL;
SELECT TO_CHAR(SYSDATE, 'hh:mi') INTO :NEW.SYSTEM_TIME FROM DUAL;
END;
Run Code Online (Sandbox Code Playgroud) 我目前正在评估用于新项目的数据库,该项目需要插入和查询大量交易数据。我们的团队倾向于使用 Cassandra,但后来我读了这篇文章,似乎建议使用不符合 ACID 的数据库可能会导致偶尔的数据丢失:
http://www.dbms2.com/2010/09/21/acid-compatible-transaction-integrity/
我在网上找不到任何关于此的更多信息,也无法理解非 ACID 合规性如何意味着可能会发生数据丢失。任何人都可以透露一些信息吗?
所以我们可以使用 Windows 登录或混合模式,但是我们可以将 SQL Server 配置为仅使用内部登录并阻止所有 Windows 登录吗?
作为预防性(或反应性)过程添加所有潜在的 Windows 登录并将其设置为受限权限的唯一解决方案是什么?
背景:我们的一些默认列约束是在没有明确名称的情况下生成的,因此我们得到了因服务器而异的有趣名称,例如: DF__User__TimeZoneIn__5C4D869D
我希望它们都可以使用一致的命名进行管理,DF_Users_TimeZoneInfo这样我们就可以确保未来的目标表存在适当的约束(比如在 RedGate 比较中,甚至只是在视觉上)
我有一个主要适用于我想要的脚本:
select 'sp_rename N''[' + s.name + '].[' + d.name + ']'',
N''[DF_' + t.name + '_' + c.name + ']'', ''OBJECT'';'
from sys.tables t
join
sys.default_constraints d
on d.parent_object_id = t.object_id
join
sys.columns c
on c.object_id = t.object_id
and c.column_id = d.parent_column_id
join sys.schemas s
on t.schema_id = s.schema_id
WHERE d.NAME like 'DF[_][_]%'
Run Code Online (Sandbox Code Playgroud)
但这只是给了我一个结果集,而不是我实际上可以传递给 exec 或其他任何东西的东西。
我怎样才能做到这一点,以便我可以只执行这些sp_rename脚本,而不必求助于复制所有返回的元素并将它们粘贴到新的查询窗口中并再次运行它们?尝试尽可能多地保存击键,以便我可以在许多环境中纠正此问题。

sql-server ×5
security ×2
delete ×1
dynamic-sql ×1
filegroups ×1
nosql ×1
oracle ×1
partitioning ×1
postgresql ×1
ssms ×1
storage ×1
trigger ×1
vacuum ×1