小编Cra*_*ein的帖子

对表进行分区会提高性能吗?

我有一个非常大的表,大约 28GB,而且还在不断增加。我正在考虑对我的表进行分区。

该表是 InnoDB 并且启用了每个表的文件

我有一个字段名称created,它是一个整数字段并存储时间戳,所以我正在考虑创建这样的表:

ALTER TABLE TABLE_NAME PARTITION BY RANGE (created)
(
PARTITION p0 VALUES LESS THAN (1325356200) ENGINE = InnoDB, # Data before 2012
PARTITION p1 VALUES LESS THAN (1333218600) ENGINE = InnoDB, # Data for JAN,FEB,MARCH YEAR 2012
PARTITION p2 VALUES LESS THAN (1341081000) ENGINE = InnoDB, # NEXT THREE MONTH DATA FOR YEAR 2012
PARTITION p3 VALUES LESS THAN (1349029800) ENGINE = InnoDB, # NEXT THREE MONTH DATA FOR YEAR 2012
PARTITION …
Run Code Online (Sandbox Code Playgroud)

mysql innodb

5
推荐指数
1
解决办法
2万
查看次数

从 SQL Server 2005 sp2 升级到 SQL Server 2005 sp4 失败

SQL Server Standard 2005 sp2 32bit 在 Windows 2003 Standard 32bit Service Pack 2 上运行。

我尝试使用SQLServer2005SP4-KB2463332-x86-ENU.exe将服务包从 sp2 升级到 sp4并收到以下错误:

Property(S): UpgradeInstruction = Connect to SQL instance MYSERVER as sysadmin
Launch SQL statement USE master
Launch script file d:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Install\sysdbupg.sql
Launch script file d:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Install\DbEngine_hotfix_install.sql
Launch script file d:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Install\repl_hotfix_install.sql
Stop service MSSQLSERVER
Property(S): SqlUpgradeMessage = SQL Server Setup failed to parse the SQL script "d:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Install\DbEngine_hotfix_install.sql". The error code is …
Run Code Online (Sandbox Code Playgroud)

sql-server-2005 service-pack

5
推荐指数
1
解决办法
3051
查看次数

多次收缩 SQL Server 日志文件

最近遇到一个情况,在进行日志备份和收缩文件后,LDF 文件大小保持不变。DBCC LOGINFO 清楚地显示只有一个活动的 VLF 和 SSMS 表示 LDF 中 99% 的空间是空闲的。第一次尝试没有缩小,第二次尝试或第三次尝试也没有缩小。第四次尝试成功后,日志减少到请求的大小。同时,DBCC LOGINFO 说在每个 SHRINKFILE 之后,另一个 VLF 变得活跃。

我决定运行一个新数据库的测试。

CREATE DATABASE logs_test
USE logs_test

-- first look at the VLFs for the logs_test database
DBCC LOGINFO

/*
FileId      FileSize             StartOffset          FSeqNo      Status      Parity CreateLSN
----------- -------------------- -------------------- ----------- ----------- ------ ---------------------------------------
2           253952               8192                 19          2           64     0
2           253952               262144               0           0           0      0

*/

-- put the database into FULL recovery before making a backup
ALTER DATABASE logs_test …
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 transaction-log

5
推荐指数
1
解决办法
3607
查看次数

将触发器与 SQL Server Profiler 表一起使用时出错

在最近对默认跟踪输出的分析中注意到 100 个 sort_warning 错误后,我正在尝试获取导致这些警告的查询文本。

在此处输入图片说明

SQL Server Profiler 有一个名为 Sort Warnings 的事件,但它没有 TextData 列。

2008 R2 无法使用扩展事件,因为 sort_warning 事件在 2008 R2 的扩展事件中不可用。

我想在我用来存储分析器结果的表上放置一个触发器,以捕获来自 DBCC INPUTBUFFER 的输出。

-- table to store the results of dbcc inputbuffer
CREATE TABLE Trace_Results(EventType NVARCHAR(30), Parameters INT, EventInfo NVARCHAR(255))

CREATE TRIGGER [dbo].[Trace_Trigger]
  ON [dbo].Trace_Table
  AFTER INSERT
AS
BEGIN
    SET NOCOUNT ON;
    DECLARE @SQL VARCHAR(MAX)

    SELECT @SQL = 'DBCC INPUTBUFFER(' + CONVERT(VARCHAR(10), ins.SPID) + ')'
    FROM   inserted ins

    --PRINT @SQL

  INSERT INTO Trace_Results (EventType, Parameters, EventInfo)
    EXEC(@SQL) …
Run Code Online (Sandbox Code Playgroud)

trigger profiler sql-server-2008-r2

5
推荐指数
1
解决办法
1627
查看次数

查询 SQL Server 2008 中的扩展事件

我使用从 Kimberly Tripp 的 SQL Server 2008 Internals 书中获得的脚本创建了以下事件会话。它已被修改为发送到文件而不是环形缓冲区。

CREATE EVENT SESSION
[statement_completed_file]
ON SERVER
ADD EVENT
    sqlserver.sp_statement_completed,
ADD EVENT
    sqlserver.sql_statement_completed
    (
        ACTION 
        (
            sqlserver.sql_text
        )
        WHERE
        (
            sqlserver.session_id=53
        )
    )
ADD TARGET package0.asynchronous_file_target
    (
        set filename=N'C:\MSSQL\TEMP\stats.xel', 
        metadatafile=N'C:\MSSQL\TEMP\stats.xem'
    )
WITH
(
    MAX_MEMORY=4096KB,
    EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,
    MAX_DISPATCH_LATENCY=1 SECONDS,
    TRACK_CAUSALITY=OFF,
    STARTUP_STATE=OFF
)
Run Code Online (Sandbox Code Playgroud)

这是查询数据的原始脚本。

SELECT
theNodes.event_data.value('(data/value)[1]', 'bigint') AS source_database_id,
theNodes.event_data.value('(data/value)[2]', 'bigint') AS object_id,
theNodes.event_data.value('(data/value)[3]', 'bigint') AS object_type,
theNodes.event_data.value('(data/value)[4]', 'bigint') AS cpu,
theNodes.event_data.value('(data/value)[5]', 'bigint') AS duration,
theNodes.event_data.value('(data/value)[6]', 'bigint') AS reads,
theNodes.event_data.value('(data/value)[7]', 'bigint') AS writes,
theNodes.event_data.value('(action/value)[1]', 'nvarchar(max)') …
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 extended-events

4
推荐指数
1
解决办法
2530
查看次数

SQL Server非聚集索引存储问题

我有一个表 people 有两个非聚集索引。

create table people(
 id_person int,
 first_name varchar(50),
 last_name varchar(50),
 city varchar(100),
 state char(2),
 zip_code int
)

CREATE INDEX id_first_name_last_name ON people(first_name, last_name, id_person)
CREATE INDEX id_last_name_first_name ON people(id_person, last_name, first_name)
Run Code Online (Sandbox Code Playgroud)

每个索引引用相同的列,但顺序不同。

-- 插入一些行

insert into people values(1,'joe','smith','new york', 'NY', 10701)
insert into people values(2,'john','smith','new york', 'NY', 10701)
insert into people values(3,'joyce','smith','new york', 'NY', 10701)
insert into people values(4,'jocelyn','smith','new york', 'NY', 10701)
Run Code Online (Sandbox Code Playgroud)

每个索引的大小如下

TableName   IndexName            IndexID    Indexsize(KB)
people          NULL                     0           16
people          id_first_name_last_name  2           16
people          id_last_name_first_name  3 …
Run Code Online (Sandbox Code Playgroud)

index sql-server storage-engine

4
推荐指数
1
解决办法
2772
查看次数

使用 powershell 删除表

尝试使用 powershell删除现有

$srv = new-Object Microsoft.SqlServer.Management.Smo.Server(".\CEF_2014_1")
$db = New-Object Microsoft.SqlServer.Management.Smo.Database
$db = $srv.Databases.Item("tempdb")

#drop the Table
$tb = new-object Microsoft.SqlServer.Management.Smo.Table($db, "listeningport")
$tb.Drop()
Run Code Online (Sandbox Code Playgroud)

但出现错误

PS C:\Users\craig.efrein\Dropbox\Scripts\Powershell> .\drop_table.ps1
Exception calling "Drop" with "0" argument(s): 
"Drop failed for Table 'dbo.listeningport'. "
At C:\Users\craig.efrein\Dropbox\Scripts\Powershell\create_table.ps1:11 char:11
+         $tb.Drop <<<< ()
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : DotNetMethodException
Run Code Online (Sandbox Code Playgroud)

如果我先创建表,然后删除它,那就行了。

我是否正确填充了 $tb 对象?

$tb = new-object Microsoft.SqlServer.Management.Smo.Table($db, "listeningport")
Run Code Online (Sandbox Code Playgroud)

作为第二个问题,如何在 powershell 中删除表之前检查表是否存在?

sql-server powershell

4
推荐指数
1
解决办法
5981
查看次数

使用中央管理服务器提供令人信服的性能统计数据

中央管理服务器

我工作的公司为其 Windows 客户端提供专用的 VMware 托管服务器。在这些 Windows 客户端中,基本上有 60 个单实例 SQL Server,版本从 2000 年到 2008 年不等。其中有 40 个 Express 版、10 个标准版以及多个 MSDE 和工作组版。

通过配置为中央管理服务器的全新SQL Server 2008 R2 标准版,我可以同时访问这些远程机器中的每一台。每个服务器都根据其版本 8、9 或 10 注册到一个组中。这意味着我可以根据它们的版本查询每组服务器以避免兼容性错误。

问题

通常,我们只能推销增加 RAM、CPU 或将 SQL Server 移到专用机器上的想法,因为客户出于 N 种原因要求我们这样做。

目标

我想使用中央管理服务器更进一步,去我们的客户那里说,如果你这样做了,那么你的网站或应用程序会快 X 倍。想象一个需要 3 秒加载的 ASP 网页,通过增加 RAM,换句话说,根据缓冲池真正需要的内容,同一页面将在 1 秒内加载。

我从Brent Ozar 的 Take Over an Unknown Server 中找到了这行 T-SQL 代码

    SELECT  @@SERVERNAME AS ServerName ,
            YEAR(backup_finish_date) AS backup_year ,
            MONTH(backup_finish_date) AS backup_month , …
Run Code Online (Sandbox Code Playgroud)

performance monitoring sql-server-2008-r2 central-management-server

3
推荐指数
1
解决办法
677
查看次数

导入 CSV 文件

目前,我们在 SQL Server 2000 上有一个 DTS 包,它导入一个名为 suicoweb.csv 的文件。DTS csv 文件属性页面如下所示。

属性页 1

在此处输入图片说明

这是来自 CSV 文件的示例行

500071;343497;260712;|Some Text; : employer : some more text|;29
Run Code Online (Sandbox Code Playgroud)

列由分号 (;) 分隔,文本限定符是管道 (|),行由回车符分隔

使用 Brownstone 先生的回答,我使用以下命令创建了一个格式文件:

bcp databasename.dbo.tablename 格式 nul -c -fd:\formatfile.fmt -T

这是该文件的输出:

9.0
18
1       SQLCHAR       0       510     "|"     1     web1numdoss
2       SQLCHAR       0       510     "|"     2     web1dem
3       SQLCHAR       0       510     "|"     3     web1def
4       SQLCHAR       0       510     "|"     4     web1douv
5       SQLCHAR       0       510     "|"     5     web1dversjj
6       SQLCHAR       0       510     "|"     6 …
Run Code Online (Sandbox Code Playgroud)

sql-server

3
推荐指数
1
解决办法
4643
查看次数

刷新数据库后如何保存然后恢复权限

STAGING 环境中的数据库每 N 周被更新一次的 PRODUCTION 副本覆盖。

在现有数据库被生产副本覆盖之前,保存然后恢复用户、角色和明确授予的权限的正确方法是什么?

我不想恢复 PRODUCTION 中的用户和权限,而是恢复数据库被覆盖之前 DEV 环境中的用户和权限。

这个刷新过程必须自动化,因为有许多不同的环境,有几十个实例,可能托管多达 10 个数据库。

sql-server permissions

3
推荐指数
1
解决办法
1万
查看次数