MySQL 手册 - 复制:
“横向扩展解决方案 - 在多个从服务器之间分散负载以提高性能。在这种环境中,所有写入和更新都必须在主服务器上进行。但是,读取可能会在一个或多个从服务器上进行。”
我看到了如何设置看起来相对简单的复制,但我还没有看到应用程序应如何与从站通信。
我假设应用程序必须确定从哪个从设备读取?应用程序还必须知道哪个服务器正在执行写入操作?或者是否可以让应用程序将所有查询发送到主站并将读取代理到从站?
在尝试将其转换为合法时间时,我经常看到这种转换:
SELECT DATEADD (ms, -1 * ((s.cpu_ticks) - r.[timestamp]), GETDATE())
FROM sys.dm_os_ring_buffers r
CROSS JOIN sys.dm_os_sys_info s
Run Code Online (Sandbox Code Playgroud)
我收到错误:
将表达式转换为数据类型 int 时出现算术溢出错误。
转换这个的正确公式是什么?
答案:ms_ticks
将数据加载到表中时,出现以下错误:
ERROR: row is too big: size 8680, maximum size 8160
Run Code Online (Sandbox Code Playgroud)
该表中有 1000 多列,这似乎是问题所在。一般的互联网建议是“重构!” 或“正常化!”。例如,这篇文章。不幸的是,我不相信这样的建议适用于我的情况。
该表用于存储从设备收集的数据。作为分析的一部分,设备会生成 PNG 图像。PNG 包含 1024 个像素。每个像素都有一个关联的数值。与像素数据一起的是与分析相关的各种其他领域。把桌子分成几部分真的没有意义。这些字段都与正在分析的特定对象在逻辑上相关联。
Postgres 似乎不喜欢每个像素都有自己的字段。该表具有以下形式的字段:pixel_1, pixel_2, ..., pixel_1024。注意,这是从通常的例子有着根本的不同phone_number_1,phone_number_2等每个像素是由于其位置的一个唯一的对象。 pixel_1具有不同的位置,pixel_123并且每个像素都有一个相关联的值。它们之间的共同点是它们都用于描述相同的分析对象。它们是 PNG 中给出的视觉表示的定量模拟。
我希望我已经把上下文说清楚了。我试图将问题归结为它的本质,但我怀疑可能需要进行一些澄清。如果需要澄清,请告诉我。
编辑:作为一项实验,我尝试将像素分解为单独的表格。这似乎是唯一可能的重构方式。但是 1024 列会产生相同的错误。
我有一个 10 GB 大小的 SQL Server 数据库。当我执行备份时,花了将近 3-4 分钟。当我尝试恢复时,几乎花了同样的 3-4 分钟。
这是否意味着 SQL Server 数据库的备份和恢复时间总是相等的,还是可以不同?
请建议并指出我背后的逻辑。
我只是观察到发布与模式比较的结果存在差异。我对 Visual Studio 数据库项目进行了更改 - 其中一些涉及删除表。
手动发布与模式比较时,在本地数据库上观察到相同的结果。我做错了什么?我认为发布会删除表格。
我们刚刚发现了另一台带有数据库的服务器。数据库归 SQL 帐户所有SA,具有public和sysadmin角色。另一个登录名是BUILTIN\Users,只有public。我只能通过这个连接。SA是disabled,即使不是,我们也可能不知道密码。
问题:有什么方法可以使用enable SA或创建另一个 sql 登录sysadmin?
我很懒惰,宁愿参数化一次(以获得名称的 object_id)并Invoke-SqlCmd用于其余工作。
给定一系列用于处理任意服务器对象的函数,下面的测试是否足以确认 CmdletBinding 输入参数Int32防止通过用户提供的方式注入$object_id?
function foo {
[CmdletBinding()]Param(
[Int32]$object_id
)
$query = "select type_desc from sys.objects where object_id = $object_id;"
Invoke-Sqlcmd -ServerInstance "localhost" -Database "tempdb" -Query $query
}
foo 3
foo "0 union all select name from sys.syslogins where sid = 0x01"
foo $null
foo ([math]::Pow(2,31)+1)
foo @(1,2)
Run Code Online (Sandbox Code Playgroud) 我在服务器级别创建了一个名为 TestUser 的登录用户,该用户分配给只读角色,现在我需要为 MyDb 上的 TestUser 登录创建一个用户
USE [MyDB]
GO
CREATE USER [Test] FOR LOGIN [TestUser]
GO
GRANT SELECT TO [Test]
GO
DENY DELETE TO [Test]
GO
DENY INSERT TO [Test]
GO
DENY UPDATE TO [Test]
GO
Run Code Online (Sandbox Code Playgroud)
一切都很好,但是当我编写测试用户创建的脚本时,我在任何地方都看不到我提供选择和拒绝插入、删除和更新的脚本
当我重新索引特定表时
\n\nDBCC DBREINDEX(@TableName, \'\',90) \nRun Code Online (Sandbox Code Playgroud)\n\n我收到一个错误
\n\n\n\n\n级别 17,状态 2,过程 aareindex,第 21 行 [批处理起始行 0]\n 无法为对象 \xe2\x80\x98dbo 分配空间。SORT 临时运行存储:\n 数据库 \xe2 中的 422738479742976\xe2\x80\x99 \x80\x98mydatabase\xe2\x80\x99 因为 \xe2\x80\x98PRIMARY\xe2\x80\x99\n 文件组已满。通过删除不需要的文件、删除文件组中的对象、向文件组添加其他文件或为文件组中的现有文件设置自动增长来创建磁盘空间。
\n
所以我想尝试增加 TempDb 的大小
\n\n我可以通过查看数据库属性使用 SSMS 查看大小,但我不知道如何设置它。
\n\n[更新]
\n\nselect type_desc, name, size, max_size, growth from tempdb.sys.database_files\nRun Code Online (Sandbox Code Playgroud)\n\n回报
\n\n\n\n文件大小已为 10236 Mb,Express 限制为 10 Gig\n但是磁盘使用情况报告显示 26% 的磁盘空间未分配,40% 为数据,32% 为索引。
\nsql-server ×7
backup ×1
centos-7 ×1
mysql ×1
permissions ×1
postgresql ×1
powershell ×1
replication ×1
restore ×1
security ×1
t-sql ×1
users ×1