我正在使用PRM为 MySQL 设置 HA。
有时,MySQL slave 因一些错误而停止:
Error executing row event: 'Table 'reportingdb.tvc_ads_tag_date' doesn't exist'
Run Code Online (Sandbox Code Playgroud)
[Warning] Slave SQL: Could not execute Update_rows event on table reportingdb.7k_banner_channel_tmp; Can't find record in '7k_banner_channel_tmp', Error_code: 1032; handler error HA_ERR_KEY_NOT_FOUND; the event's master log mysql-bin.000854, end_log_pos 859094925, Error_code: 1032
120828 0:36:13 [Warning] Slave SQL: Could not execute Write_rows event on table reportingdb.7k_bookings_ver; Duplicate entry '1518' for key 'PRIMARY', Error_code: 1062; handler error HA_ERR_FOUND_DUPP_KEY; the event's master log mysql-bin.001022, end_log_pos …
我在 Amazon Web Services 上有一个 RDS MySQL 数据库。
我想减少控制面板中数据库的大小以节省资金。
问:如何让它变小?他们的网站说你必须用某种神奇的方式(从备份或其他方式),但我不想错误地重击它!
请一步一步...谢谢!

这就是发生的事情:亚马逊问我想要的最大尺寸应该是多少。我选择了 10GB。然后我添加数据,直到表超过 10GB。然后亚马逊自动将大小限制增加到 20GB。在他们的手册中,他们说“增加”是自动的,但“减少”不是。
在删除一些多余的数据后,数据大小再次低于 10GB,有没有办法创建一个新的 10GB db 并使用快照将数据复制到它?
我正在编写一些动态 SQL 来识别,也许如果我觉得够疯狂,可以自动将我的NONCLUSTERED索引转换为CLUSTERED索引。
ORDER BY 1,2,3 DESC;下面的 SQL 中的这一行旨在在DROP INDEX...语句之前输出语句ALTER TABLE...,以便先删除 NONCLUSTERED 索引,然后添加一个 CLUSTERED 索引。我必须在第DESC3 列之后添加DROP,然后是 ALTER。这是倒退,除非我失去它!
DECLARE @Server nvarchar(max);
DECLARE @Database nvarchar(max);
DECLARE @cmd nvarchar(max);
DECLARE @IndexType int;
SET @IndexType = 2; /* 1 is CLUSTERED, 2 is NONCLUSTERED */
SET @Server = 'MyServer';
SET @Database = 'MyDatabase';
SET @cmd = '
DECLARE @cmd nvarchar(max);
SET @cmd = ''
SET NOCOUNT ON;
DECLARE @IndexInfo TABLE (TableName nvarchar(255), IndexName …Run Code Online (Sandbox Code Playgroud) 我在生产服务器上有几个数百 GB 的数据库,每天都有成千上万的事务通过它们运行。
几乎所有这些数据库都使用 SQL Server 镜像进行镜像。
尽管我们已经仔细规划了物理日志文件大小以匹配预期的日志文件活动;偶尔会出现问题,日志需要增长到超出我们预测的最大值。我们已将所有日志文件设置为增长 8192MB,但是当数据库面临增长日志文件的压力时,它有时只会以非常小的块增长日志,从而在某些情况下创建数十万个虚拟日志文件 (VLF) .
当我们的一个生产数据库意外恢复超过 200,000 个 VLF 时,我开始理解保持低 VLF 数量的重要性。恢复需要 20 多个小时;在此期间,我们的部分业务无法运营。
我需要一个可以监控服务器上所有数据库的虚拟日志文件数量的解决方案,如果任何特定日志文件的 VLF 数量超过给定数量,则发送警报电子邮件。
我知道DBCC LOGINFO;返回 VLF 列表,但是,我不想手动运行它。
我创建了以下 SQL 语句,该语句创建了一个列出数据库以及 VLF 数量的漂亮表,但是,我不知道如何将其放入 SQL 代理作业中,以便在任何数据库的数量超过“x”时向我们的团队发送电子邮件的 VLF。
DECLARE @cmd_per_database_prefix nvarchar(max);
DECLARE @cmd_per_database nvarchar(max);
DECLARE @database_name nvarchar(255);
SET @cmd_per_database = '';
SET @cmd_per_database_prefix =
'
SET NOCOUNT ON;
DECLARE @vlf_count_table TABLE (database_name nvarchar(255), vlf_count int);
DECLARE @params nvarchar(max);
DECLARE @db_name nvarchar(255);
DECLARE @vlf_count int;
SET @params = ''@db_name nvarchar(255) OUTPUT, @vlf_count …Run Code Online (Sandbox Code Playgroud) 当我的 .Net Web 应用程序运行缓慢时,我遇到了一个问题,即使我已经优化了所有查询。事实证明,另一位制作报告的开发人员一直在运行一堆未优化的查询。所以我决定为他创建一个单独的服务器。目前我创建了 Jobs 进行备份,将其复制到另一台服务器并恢复它。但这是临时解决方案,因此为了让第二台服务器拥有最新数据或至少延迟最小,我正在研究创建只读副本的机会。
由于我不是 DBA,因此我阅读了大量有关 SQL Server 复制机制的文章或文章。对我来说最好的选择是当我的 PROD Web 应用程序完全不受复制影响时,我的意思是对同步表进行大量锁定。我不需要像镜像那样实时同步,也不需要任何集群解决方案之王,只需读取我的 PROD 数据库的同步副本。所以我选择了Transactional具有异步分发策略(按计划)的复制机制(不可更新)。
所以我有一些问题:
在 SQL Server 复制机制中,事务复制是否最适合我的问题?
如果我有机会从 SQL Server 2008 迁移到 SQL Server 2012,事务复制会发生一些重大变化吗?我在technet上读过一篇文章,可能会出现错误?
SQL Server 2012Always On机制不是更好地解决我的问题吗(我正在考虑将此选项作为最后一个选项,因为我仍在使用 2008 R2,但不久之后计划迁移到 2012)?
sql-server sql-server-2008-r2 sql-server-2012 transactional-replication
首先,我意识到有人问过类似的问题,并且对于 679 页的索引,海报的页数设置为 1000;不是怎么回事。
我将 Ola 的脚本设置为
@Databases nvarchar(max)
,@FragmentationLow nvarchar(max) = null
,@FragmentationMedium nvarchar(max) = 'INDEX_REORGANIZE'
,@FragmentationHigh nvarchar(max) = 'INDEX_REBUILD_ONLINE'
,@FragmentationLevel1 int = 50
,@FragmentationLevel2 int = 75
,@PageCountLevel int = 400
,SortInTempdb nvarchar(max) = 'N'
,maxdop int = null
,fillfactor int = null
,PadIndex nvarchar(max) = null
,LOBCompaction nvarchar(max) = 'Y'
,UpdateStatistics nvarchar(max) = 'ALL'
,OnlyModifiedStatistics nvarchar(max) = 'Y'
,StatisticsSample int = null
,StatisticsResample nvarchar(max) = 'N'
,PartitionLevel nvarchar(max) = 'Y'
,MSShippedObjects nvarchar(max) = 'N'
,Indexes nvarchar(max) = …Run Code Online (Sandbox Code Playgroud) index sql-server index-statistics fragmentation ola-hallengren
我在 Windows Server 2016 Core 上安装了 SQL Server 2016。在本地,它似乎有效。我可以连接使用SQLCMD.exe并做一些基本的选择,什么不是。
从远程,我无法连接。使用SQLCMD.exe远程计算机上:
sqlcmd -S boldiq_db3
Sqlcmd: Error: Microsoft SQL Server Native Client 11.0 : Named Pipes
Provider: Could not open a connection to SQL Server [53]. .
Sqlcmd: Error: Microsoft SQL Server Native Client 11.0 : Login timeout
expired.
Sqlcmd: Error: Microsoft SQL Server Native Client 11.0 : A network-related
or instance-specific error has occurred while establishing a connection
to SQL Server. Server is not found or not …Run Code Online (Sandbox Code Playgroud) 作为测试阶段,我安装了 SQL Server 2014 企业版的评估版。
当我通过 SQL Server Management Studio 分离数据库时,我看到两个选项:
这两个选项都将从 SQL Server 实例中分离数据库。这两个选项有什么区别?
采取以下再现:
USE tempdb;
IF OBJECT_ID(N'dbo.t', N'U') IS NOT NULL
DROP TABLE dbo.t
GO
CREATE TABLE dbo.t
(
id int NOT NULL
PRIMARY KEY
NONCLUSTERED
IDENTITY(1,1)
, col1 datetime NOT NULL
, col2 varchar(800) NOT NULL
, col3 tinyint NULL
, col4 sysname NULL
);
INSERT INTO dbo.t (
col1
, col2
, col3
, col4
)
SELECT TOP(100000)
CONVERT(datetime,
DATEADD(DAY, CONVERT(int, CRYPT_GEN_RANDOM(1)), '2000-01-01 00:00:00'))
, replicate('A', 800)
, sc2.bitpos
, CONVERT(sysname, CHAR(65 + CRYPT_GEN_RANDOM(1) % 26)
+ CHAR(65 + CRYPT_GEN_RANDOM(1) …Run Code Online (Sandbox Code Playgroud) sql-server execution-plan database-internals sql-server-2012
我有 SQL Server 2016 SP2 (13.0.5237.0)。这是我最近在系统中注意到的死锁图。死锁优先级高的进程被选为牺牲品(可能是因为与其他进程相比日志使用率高)。但这不应该发生。这是 SQL 中引入的缺陷吗?有没有办法防止死锁优先级高的进程成为受害者?这是死锁xml:
<deadlock>
<victim-list>
<victimProcess id="process1d3ea515848" />
</victim-list>
<process-list>
<process id="process1d3ea515848" taskpriority="10" logused="5800" waitresource="OBJECT: 9:290100074:0 " waittime="4711" ownerId="359850034" transactionname="user_transaction" lasttranstarted="2019-07-31T08:12:25.267" XDES="0x1d2f62d1840" lockMode="Sch-M" schedulerid="3" kpid="10320" status="suspended" spid="52" sbid="0" ecid="0" priority="5" trancount="4" lastbatchstarted="2019-07-31T08:13:30.990" lastbatchcompleted="2019-07-31T08:13:29.427" lastattention="1900-01-01T00:00:00.427" clientapp=".Net SqlClient Data Provider" hostname="XXX" hostpid="14944" loginname="NT AUTHORITY\SYSTEM" isolationlevel="read committed (2)" xactid="359850034" currentdb="9" currentdbname="XXX" lockTimeout="4294967295" clientoption1="673415200" clientoption2="128056">
<executionStack>
<frame procname="CreatePartition" line="30" stmtstart="2052" stmtend="2218" sqlhandle="0x03000900d670d75323ec7f0094aa000001000000000000000000000000000000000000000000000000000000">
ALTER PARTITION FUNCTION... </frame>
<frame procname="CreatePartitions" line="26" stmtstart="1618" stmtend="1788" sqlhandle="0x030009000f95cb5424ec7f0094aa000001000000000000000000000000000000000000000000000000000000">
EXEC CreatePartition </frame>
</executionStack>
<inputbuf>
Proc [Database …Run Code Online (Sandbox Code Playgroud) sql-server ×8
mysql ×2
amazon-rds ×1
deadlock ×1
dynamic-sql ×1
index ×1
mysql-5.5 ×1
replication ×1