Разделы
Публикации
Популярные
Новые
|
Главная » Оптимизация производительности transact 1 ... 47 48 49 50 51 52 53 ... 55 USE master GO IF OBJECT ID(sp funtext resource) IS NOT NULL DROP PROC sp funtext resource CREATE PROC sp funtext resource Ovaiue int -- Значение для resource usage AS DBCC CALLFULLTEXTO.Ovaiue) -- FTSetResource (Ovalue) IF (POerroroO) RETURN 1 -- УСПЕХ --RETURN 0 -- sp fulltext resource GO EXEC sp MS marksystemobject sp fulUext resource EXEC sp fulltext resource 3 DBCC DBCONTROL(dbname,option) Эта команда устанавливает опции базы данных. Она выполняет многие из функций хранимой процедуры sp clboption и вызывается этой процедурой. Параметр dbname есть имя базы, параметр option есть указатель на устанавливаемую опцию. В табл. 20.2 перечислены допустимые значения параметра option. Таблица 20.2. Допустимые значения параметра option для команды DBCC DBCONTROL() Значение Описание multi Указывает многопользовательский режим offline Переводит базу в offline online Переводит базу в online readonly Делает базу доступной только для чтения readwrite Делает базу доступной для чтения и записи single Указывает однопользовательский режим DBCC DBCONTROLCpubs,multi) DBCC DBINFO(dbname) Перечисляет системную информацию об указанной базе, включая дату ее создания, идентификатор, статус, следующее значение timestamp и так далее. DBCC DBINFOCpubs) DBINFO STRUCTURE: DBINFO iaOx0690F99B dbi dbid = 5 dbi status = 4194436 dbi nextid = 1B10B21513 dbi dbname = pubs dbi maxDbTimestamp = 2000 dbi version = 515 dbi createVersion = 515 dbi nextseqnum = 1900-01-01 00:00:00.000 dbi crdate - 199B-11-13 03:10:45.610 dbi filegeneration = 1 dbi checkptLSN mJSeqNo = 65 m blockOffset = 340 m slotId = 1 m fSeqNo = 0 m blockOffset = 0 m s1otId = 0 dbi sortord = 52 dbi charset = 1 db1 LcidCfg = 1033 dbi CompFlagsCfg - 196609 dbi maxLogSpaceUsed = 3828736 DBCC DBRECOVER(dbname) Команда принудительно восстанавливает базу данных. Обычно базы восстанавливаются при запуске сервера. Если этого не происходит из-за ошибки или отключения восстановления (см. трассировочные флаги 3607 и 3608 ниже), можно использовать эту команду. Параметр указывает и.мя базы, которую требуется восстановить. DBCC DBRECOVERCpubs) DBCC DBTABLE(dbid) Команда перечисляет информацию DBT (DB Table) и FCB (File Control Block) для указанной базы. DECLARE ©dbid int SET iadbid-DB ID(pubs) DBCC DBTABLE(@dbid) DBTABLES: DBTABLE iaOxlFA05914 dbt dbid - 5 dbt dbname pubs dbt sp1d = 0 dbt cmptlevel = 70 dbt crt1me = 1999-01-26 15:36:50.723 dbt dbdes = Ox374b7de0 dbt next = Oxlf9bd418 dbt protstamp = 0 dbt nextid = 1B10821513 dbt dbnanie = pubs dbt stat = 0x400004 dbt stat2 = 0x100000 dbt relstat - 0x41000000 dbt maxDbTimestamp = 2000 dbt dbTimestamp = 2000 dbt dbVersion = 515 dbt repltrans 0 dbt replcount = 0 dbt replrate = 0.000000 dbt repnatency = O.OOOOCO dbt logmgr = Oxlf9d3ebB dbt backupmgr = 0x0 distbegmlsn = (0:0:0) distendlsn = (0:0:0) replbeginlsn = (0:0:0) replendlsn = (0:0:0) FCB ia0xlFA4A448 fcb hdl = 0x3f0 fcb dbid = 5 fcbjileid = 1 fcb name = d:\MSS0L7\DATA\pubs.mdf fcb lname = pubs fcb nwrt = 0 fcb nread - 0 m status = 51380611 m size = 272 m maxSize = 4294967295 m minS1ze = 96 m allocSize = 272 m growth = 10 m perf = 0 m FormattedSectorSize = 512 m ActualSectorSize - 512 FCB iaOxlFA4AE48 fcb hdl = 0x3f8 fcb dbid = 5 fcb file1d = 2 fcb name = d:\MSS0L7\DATA\pubs log.ldf fcb lname - pubs log dbiJbbackupLSN m fSeqNo = 43 m blockOffset = 326 m slotId = 1 dbiJastdbbackupLSN m fSeqNo = 43 m blockOffset = 332 m slotId = 1 dbi createlndexLSN fcb nwrt О fcb nreac = О ni status = 51429698 m size = 528 m maxSize = 4294967295 m niinSize = 63 m anocSize = 528 ni growth - 10 m perf = 0 ni FormattedSectorSize = 512 m ActualSectorS1ze = 512 DBCC DtLETEINSTANCE(object.instance) Удаляет добавленный ранее при помощи DBCC ADDINSTANCE экзе.мпляр объекта РегЬгщапсе Monitor. Параметр object - имя объекта, instance - имя экземпляра, который требуется удалить. Для удаления нескольких экземпляров следует указать групповой символ в качестве значения пара.метра instance. DBCC DELETEINSTANCECSQL Replication Merge, Г) DBCC DES(dbid,objid) Выводит системную информацию об указанио.м объекте. DECLARE Pdbld int, Pobjld int SELECT (adbid=DB ID(pubs), Pobj id=OBJECT ID(authors) D8CC DES((adbid, Pobjid) DESs: DES (a0x374B74E0 dhash - Ox374b53eO dhavCnt = 0 dindex = 0xlf9b23f8 dmaxrow = 183 dopen = 0 dobjstat,objid = 117575457 dobjstat,objsysstat - 0x3903 ddb1d = 5 dstatus 0x20 ddbptr = 0xlfa05914 ddbdes = 0x374b73e0 dminlen = 24 dtscolid = 0 dtsoff = 0 decwait = 0x0 dobjid = 117575457 dobjtype - 8277 dobjrepl = 0 dschema = 102 dobjcols = 9 DBCC DETACHDB(dbnare) Данная команда отсоединяет базу данных от сервера. После этого ее можно переместить на другой сервер и присоединить при помощи sp attach clb. Эта команда вызывается систе.\июй храни.мой процедурой sp cletach clb. DBCC 0ETACHDB(northw1nd2) DBCC DROPCLEANBUFFERS Очищает все данные в памяти. Полезна при тестировании производительности, когда необходимо нивелировать эффект кэширования. DBCC DROPCLEANBUFFERS DBCC DROPEXTENDEDPROC(procname) Удаляет расширенную храии.мую процедуру. Вызывается из храни.мой процедуры sp clropextencleclproceclure. USE master DBCC DROPEXTENDEDPROC(xp computemode) DBCC ERRORLOG Закрывает текущий журнал ошибок и открывает новый, циклически меняя расширения файлов, как при перезапуске сервера. Вызывается из хранимой процедуры sp cycie errorlog. DBCC ERRORLOG DBCC LOCKOBJECTSCHEMA (objname) Блокирует схему от изменений другими соедииения.ми до завершения текущей транзакции. Также увеличивает значение столбца scliema ver таблицы sysobjects. Эта команда не имеет эффекта при вынолненин вне транзакции. USE pubs BEGIN TRAN DBCC LOCKOBJECTSaiEMA(titleauthor; DBCC EXTENTINFO(dbname, tablename, indid) Возвращает информацию обо всех экстентах объекта. Параметр dbname - и.мя базы, иара.метр tablename - имя таблицы, indid - ндентифтотор индекса, для которого требуется получить информацию, овес EXTENTINFOCpubs. titles .1) file id page id pg allcc ext size objjd 4idexjc pfs oytes avgjjsed 1 120 1 1 2615/5970 1 0x6000000000000000 25 1 132 1 1 2615759/0 1 0x6000000000000000 25 DBCC FLUSHPROCINDB(dbid) Вызывает псреком1Н1Ляцию всех храни.мых процедур в базе. Hapa.vieTp dbid - идентификатор целево!! базы даитлх. Это удобно, если была изменена опция в базе данных, которая может приншшиалыю повлиять на планы запросов, созданные для хранимых процедур. Например, процедура sp dboption вызывает DBCC FLUSHPROCINDB для гарантии, что изменения опци1 1 будут восприняття процедурами. DECLARE ©dbid int SET iadbid=DB ID(pubs) DBCC FLUSHPROCINDB(@d0id) DBCC FREEPROCCACHE Данная ко.манда очищает процедурный кэш. Эт удобно при тестировании производительности, когда требуется нивелировать эффект процедурного кэширования или когда необходимо, чтобы планы выполнения процедур учитывгьли новые значения конфигурации, овес FREEPROCCACHF DBCC IND(dbid, objid[,printopt {О j 1 j 2}]) Эта команда вьшодит систе.\тную инфор.мащтю об тпщексах д.1Я указангюго о&ьеюа. DECLARE ©dbid int. ©objid int SELECT ©dbid=DB ID(pubs), ©objid=OBJECT ID(pubs..authors) DBCC IND(©dbid.©objid. 1) PageFIO PagePID lAMFID lAMPIB ObjectlB IndexID Pagelype IndexLevel NextPageFID 1 101 NULL NULI 11/575457 I 10 0 0 1 100 1 101 117575457 0 i 0 0 1 127 1 101 117575457 12 0 0 -- Закоииепируй-е COMMIT и п.опробуйге выполнить nSKeHeiwie ООСтаблицо! -- titleauthor из другого соединения. Новое соединение будет ожидать -- завершения транзакции этого соединения COMMIT TRAN DBCC LOG(dbid) Команда отображает тшформацтно и.ч текущего журна-ча транзакций. Можно нри.мент1ть конструкцию INSERT...ЕХЕС() для сохранент1Я результатов для hocjic- дующей обработки. CREATE TABLE #Iogrecs (CurrentLSN varcharOC). Operation varchar(20). Context varc.har(20). TransactionID varchar(20)) INSERT #logrecs EXECCDBCC LOGCubs ) SELECT * FRCM #logrecs GO DROP TABLE #logrecs (результаты сокращены) CurrentLSN Operation Context TransactionID 00000035:00000144:0001 LOP BEGIN CKPI LCX NULL 0000:00000000 00000035:00000145:0001 LOP END CKPT LCX NULL 0000:00000000 00000035:00000146:0001 LOP MODIFY ROW LCX SCHEMA VERSION 0000:00000000 00000035:00000146:0002 LOP BEGINJACT LCXJULL 0000:000020e0 00000035:00000146:0003 LOP MARK DDL LCXJULL 0000:000020e0 00000035:00000146:0004 LOPJOMMITJACI LCX NUL[. 0000:000020eO 00000035:00000147:0001 LOP MODIFY RCW LCX SCHEMA VERSION 0000:00000000 00000035:00000147:0002 LOP BEGIN XACT LCXJULL 0000:000020el 00000035:0000014/:0003 LOP MARK DDL LCXJULL 0000:000020el DBCC PAGE(dbid dbname, filenum, pagenum [,printopt][,cacheopt]) Выводтгт соде1)Жимое указанной страницы базы данных. Параметр dbiddbname указывает идетгги фи кагор или и.мя базы, filenum указывает иоме[) файла, содержащего страницу, pagenum - ио.мер страницы, printopt указывает, какую и.менно инс}юрмацию требуется вывести, а cacheopt указывает версию страницы (с диска - значение О, из гщмяти - значение 1). В табл. 20.3 приведены допустимые значения параметра printopt. Таблица 20.3. Допустимые значения параметра printopt Значение Описание 0 (Значение по умолчанию.) Выводит заголовки страницы и буферов 1 Выводит заголовки страницы и буферов, каждую запись таблицы и таблицу смещения записей 2 Выводит заголовки страницы и буферов, саму страницу и таблицу смещения записей Обратите внимание, что эта ко.манда должна быть предварена ко.мандой DBCC TRACEON(3604), чтобы результаты были направлены клиенту. овес TRACE0N(3604) GO DBCC PAGECpubs. 1.70.2.0) GO DBCC TRACEOFF(3604) GO (результаты сокращены) PAGE; BUFFER: BUF ©OxllBBlEBO bpage = OxlF6E4000 bhash = 0x00000000 bpageno - (1:70) bdbid = 5 breferences = 1 bkeep = 1 bstat - 0x9 bspin = 0 bnext - 0x00000000 PAGE HEADER: Page @OxlF6E4000 m pageld = (1:70) m typeFlagBits = 0x0 m objId = 19 m nextPage = (0:0) m freeCnt = 4 mjsn = (1:324:11) m ghostRecCnt = 0 GAM (1:2) ALLOCATED. ALLOCATED 0 POT FULL m headerVersion = 1 mjevel = 0 m indexld - 1 pminlen = 90 m freeData = 81B4 m xactReserved = 0 m tornBits = 0 SGAM (1:3) NOT ALLOCATED m type - 10 ni nagBits - 0x2 m prevPage = (0:0) m slotCnt = 2 m reservedCnt = 0 m xactld = (0:0) PES (1:1) 0x70 lAM PG MIXED EXT DATA: Memory Dump @0xlF6E4060 If6e4060: OOOOSeOO 00000000 00000000 00000000 ............... If6e4070: 00000000 00000000 00000000 00000000 ................ DBCC PRTIPAGE(dbid, objid, indexidC. printopt {0 1 2}]) Выводит информацию о странице для указанного индекса. DECLARE (adbid int. gpagebin varchar(12), (Spageid int, Ofileid int, ©objid int SELECT TOP 1 ©dbid=OB ID(pubs), @objid=id, ©pagebin-first FROM pubs sysindexes WHERE id=OBJECf IO(pubs.,authors) EXEC sp decodepagebin ©pagebin, ©fileid OUT, ©pageid OUT OBCC PRTIPAGE(©dbid, ©objid, 2, ©pageid) (результаты сокращены) Fileld Pageld Row Level au Iname au fname 228 228 228 228 228 228 Bennet Blotchet-Halls Carson DeFrance del Castillo Dull Abraham Reginald Cheryl Michel Innes 1 228 6 О Green 1 228 7 0 Gneene 1 228 8 0 Gringlesby 1 22В 9 0 Hunten Manjonie Morningstan Bunt Sheryl DBCC RESOURCE Выводит информацию об использовании ресурсов сервером. овес TRACEON(3604) DBCC resource DBCC TRACEOFF(3604) RESOURCE: RESOURCE g0x007D8228 rdbtab = 531005480 rdescount = 128 rprocnhash = 0x3749053c rflag2 - 0 rMSversion = 117441211 rlangcache - 52B558048 rservername = KHEN 450 ropen objmsgs = 0 pResLock = 927379360 DefaultLogin = guest DefaultDomain = KHEN 450 MapChans[l] $ = MaxCPUs = 2 pbuffneewait = 0 pResLockFnee = 927662120 pesExpnSnv - 0xlf81c3e8 PERFMON gOx007D8260 pcputicks = 0 pbs npck = 683 pbs sbyt = 0 pblk nd = 932 pblk outstanding nd = LRU cnt = 0 DS CONFIG @0x007D9060 cconfsz = 8 cnevision = 14 creelnterval - 0 cmbSrvMemMax = 2147483647 ckblndexMem - 0 cextendedmemory MB = 0 cspinctn = 0 cfglogintime = 5 cfgxdes = 16 cfgdes = 0 cstacksz = 0 cfgnmttimeout - 10 cfg max text repl size = ndes = 927695072 *prpssarray = 528654468 npnocmemused = 78 rprocnum = 32 nbufsteals = 0 nlangfnee - 0 senvicename = MSSOLServer pPerfStats - 8658600 LoginMode = 0 AuditLevel = 0 SetHostName - 0 MapChans[2] -fOBCSNonCase = TRUE pHandlens - 0 MaxSubPnocesses = 32767 neplmem = Oxlf826028 *ndesnash = 927671776 npnocihash = Ox3747053c nflagl = 144 ndump = 0 npsytab = 92/665708 nbinaryversion = 515 nnls = 14848 pBufGStats = 8659488 rsaspid = 0 ckpt status = 0 MapCharstO] = MaxConnections = 32767 bpool = 8224800 anticle cache = 528647120 CunSubProcesses = 0 piotlcks = 0 pbs spck = 0 pbs conn = 36 pblk wn = 1568 pblk outstand1ng wn BUFLNK cnt = 0 cmajon = 6 cbootsource = 2 ccatalogupdates = 1 cusrconnections = 0 cfillfacton = 0 ctapneten = 0 cfgpniorityboost = 0x0 cfgpss = 0 cfgaffinitymask - 0 cfglocks = 0 cfgcursorthrsh = -1 cfg dtc rpcs = 0 65536 pidlticks = 0 pbs rbyt = 90854 pbs errors = 0 pblk errors = 0 psiteconns = 0 DATASERV cnt = 0 cminor = 0 cnestimeout = 10 cmbSrvMemMin = 0 cnetwonkpcksize = 4096 cavetimeslice - 100 cwnitestatus = 0 cfgexposeadvpanm = 0x1 cfgpad - 4096 cfgbuf = 4362 cfgquenytime = 0 cnblkmax = 32 cclknate = 31250 cfgupddate = 36386 cfgupdtime = 15525951 fRemoteAccess = 1 cfgbufminfree - 331 cnestedtriggers - Oxi cfgworkingset = OxC ceaseless = 0 cdeflang = 0 cnlanginfo = 3 cold scrtord = 0x34 cold charset = 0x1 csortord = 0x34 ccharset = 0x1 IcidCfg = 0x409 IcidCfgOld = 0x409 dwCompFlagsCfg = 0x30001 dwCompFlagsCfgOld = 0x30001 cfgCutoffYear = 2049 cfgLangNeutralFT - 0 csysdbstart = 0 cfglogsleep = 0 raaxworkthreads = 255 minworkthreads = 32 minnetworkthreads - 32 threadtimeout = 15 connectsperthread 0 cusroptions - 0 exchcostthreshold - 5 maxdop - 0 cchecksum = 770 rWrkExtCache = Used Cache Entry = lam (1-.S6). Extent (1-.П2) Cache Entry = lam (1:104). Extent (1:96) Cache Entry = lam (0:0). Extent (0:0) DBCC SETINSTANCE(object,counter,instance,val) Устанавливает значение счетчика производительности. Можно использовать при замере производительности запроса и хранимой п])0цедуры. По сути, так работают процедуры sp user counternn - они вызывают DBCC SETINSTANCE. Параметр object - имя объекта, instance - имя экземпляра, counter - имя счетчика, val - новое значение. DBCC SETINSTANCE(SOLServer:User Settable. Query. User counter 1. 3) DBCC TAB(dbid,objid[,printopt-CO 1 2}}]) Выводит системную информацию для указанной таблицы. DECLARE (adbid int, ©objid int SELECT (adbid-DB ID(pubs), ©objTd=QBJECTJD(pubs, .authors) DBCC TAB((adbid, ©objid, 2) PageFIO PagePID lAMFID 1АМРШ ObjectlD IndexID PageType IndexLevel NextPageFID NextPagePID 101 NULL NULL U7575457 1 10 0 0 0 100 1 101 117575457 0 10 0 0 127 1 101 117575457 12 0 0 0 229 NULL NULL 117575457 2 10 0 0 0 228 1 229 117575457 2 2 0 0 0 DBCC UPGRADEDB(dbname) обновляет системные объекты в указанной базе до текущей версии серверного механизма. DBCC UPGRADEDB(oldpubs) Недокументированные функции и переменные Как было сказано ранее, недокументированные возможности Transact-SQL, включая функции, являются таковыми по определенной причине. Они могут быть опасны и даже могут привести к катастрофнчески.м последствиям, если их некорректно использовать. Они таклсе .могут измениться .между релиза.ми. Так что хорошо подумайте, стоит ли прн.менять эти функции в свое.м коде. Ох594Е554152454153А8414С45ДС4553535359434Е50484]4Е54 GET SID(username) Возвращает текущий системный идентификатор NT для указанного пользователя или группы как значение типа varbinary(85). Укажите \U для поиска идигтифи-катора но.чьзователя, \G для поиска идентификатора группы. Обратите вни.маиие, что эта функция работает только в системных храни.мых процедурах с установ-лениы.м системным битом (см. sp MS marksystemobject). USE master GO IE ,OBJECT lD(sp get sid) IS NOT NULL) DROP PROC sp get snd CREATE PROCEDURE sp get sid loginame sysname DECLARE gsid vanb-nary(85) IF (ch,arindex(X, glcginame) G) SELECT SUSER SID(0lcg1naine) AS SQE User ID ELSE BEGIN SELECT C°s-id-get sid(\U+?loglnam,e. NULL) IF gsid IS NULL SELECT @sic=get sidC\G+@!oginame. NULL) - Может быть, это группа IF @s-id IS NULL BEGIN RA1SERR0R(Couldnt find an ID for the specified loginame.16.10) RETURN -1 END ELSE SELECT gsid AS NT User ID RETURN 0 EXEC sp MS mark.systemotject sp get sid EXEC sp get sid LEX TAL10MS\KHEN NT User ID Ox0105000000000005150000000A423635BE3136688847202CE8030000 OBJECT ID(../local) Функция OBJECT ID() документирована, no ее второй необязательный параметр - нет. Так как в качестве первого пара.метра этой функции люжно передать полное имя объекта, она .может возвращать идентификаторы объектов из других баз, а не только пз текущей базы данных. Иногда .это может быть нежелательно. Например, если производится действие с объектом, который требует доступ к информации каталога текущей базы, может потребоваться гарантия, что тьмени ENCRYPT(string) Эта функция шифрует строку. Используется серве1)о.\1 для шифрования Transacl-SQL-кода в syscomments (когда указана опция WITH ENCRYPTION). SELECT ENCRYPTCVALET) PWDENCRYPT(str) Шифрует строку при помощи механизма шифрования паролей SQL Server. Хранимые процедуры, управляющие пароля.ми SQL Server, используют эту 41ункцию. Можно использовать недоку.ментированную функцию PWDCOMPARE() для сравнения строки и значения, которое вернула PWDENCRYPT(). SELECT PWDENCRYPT(vengeance) AS EncryptedString.PWDCOMPARE(vengeance, PWDENCRYPT(vengeance), 0) AS EncryptedCompare EncryptedString EncryptedCompare EncryptedString EncryptedCompare TSEQUAL(tsl,ts2) Сравнивает два значения типа timestamp: возвраи1ает 1, если они равны, и вызывает ошибку в противном случае. Функция TSEQUAL() существует давно и существовала еще в те времена, когда Microsoft SQL Server был просто портом Sybase SQL Server iia OS/2. Она уже не используется так часто, поскольку это больше не нужно. Можно непосредстве1шо сравнить два столбца типа timestamp и решить, дужно ли вызывать ошибку. Также нет смысла применять TSEQUAL() по соображениям производительности. Так как эта функция не описана в Books Online, я вынужден включить ее в эту главу: USE tempdb CREATE TABLE #testts объекта соответствует некоторый идентификатор и в то же время объект локальный. Передайте вторым параметром значение local, для того чтобы ограничить работу функции текущей базой: USE pubs SELECT OBJECT ID(Northwind..Orders). OBJECT ID(Northwind..Orders,1ocal) 357576312 NULL PWDCOMPARE(str,pwd,oldenc) Сравнивает строку с шифрованным паролем. Параметр str - строка, параметр pwd - шифрованный пароль, значение oldenc, paBiioe 1, свидетельствует об использовании старого механизма шифрования. Шифрованный пароль можно получить из столбца password таблицы sysxlogins или применить недокументированную функцию PWDENCRYPTO для получения его из строки (см. ниже). SELECT PWDCOMPARE(enmity, password, (CASE WHEN xstatus&2048=2048 THEN 1 ELSE 0 END)) FROM sysxlogins WHERE name=k reapr 1 ... 47 48 49 50 51 52 53 ... 55 |
© 2004-2024 AVTK.RU. Поддержка сайта: +7 495 7950139 в тональном режиме 271761
Копирование материалов разрешено при условии активной ссылки. |