블로그 이미지
내게 능력 주시는 자 안에서 내가 모든것을 할수 있느니라 - 빌립보서 4 : 13 - happydong

카테고리

Happydong (1363)
프로그래밍 (156)
01.C#기초 (4)
02.C#고급 (13)
03.ASP.NET (28)
04.HTML&Script (17)
05.Silverlight (38)
06.C 언어 기초 (2)
07.iOS (14)
08.Java (5)
09.SQL (8)
10.컴퓨터보안 (10)
11.패턴이야기 (3)
12.유니티3D (1)
13.Ubuntu (7)
14.Node.js (6)
MUSIC (16)
인물 (3)
Utility (10)
세미나 소식&내용 (22)
IT뉴스 (18)
운동 (830)
CAFE (10)
Life (282)
Total
Today
Yesterday

'프로그래밍/09.SQL'에 해당되는 글 8건

  1. 2013.12.17 [MySQL] root 패스워드 분실시
  2. 2012.07.03 [MS-SQL] 2008 플랜캐시(Plan Cache) 삭제하기
  3. 2009.11.18 [MS-SQL] DB Table 갯수 확인



[원본 출처 : http://www.apmsetup.com/database.php?tutid=138&uid=291]

Windows 플랫폼 일단 실행되고 있는 MySQL 데몬을 종료 하여야 합니다. 작업 관리자(Ctrl+Shift+Esc) 또는 Ctrl+Alt+Del 을 실행시켜서 mysqld.exe 또는 mysqld-nt.exe 를 찾아서 프로세스 종료 해주신 다음 아래의 방법대로 작업 하시기 바랍니다. MS-DOS 창을 열어서 Windows 98 :: 시작 -> 실행 -> command Windows NT :: 시작 -> 실행 -> cmd MySQL 이 설치된 디렉토리로 이동하신다음

mysqld.exe --skip-grant
다음과 같이 승인 절차를 거치지 않도록 MySQL 데몬을 실행합니다. 또 다른 MS-DOS 창을 열어서 MySQL 이 설치된 디렉토리에서 아래와 같이 실행 합니다.
mysql.exe Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 to server version: 4.0.14-max-debug Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> use mysql; Database changed mysql> UPDATE user SET password=PASSWORD('변경할패스워드') where user='root'; Query OK, 0 rows affected (0.14 sec) Rows matched: 1 Changed: 0 Warnings: 0 mysql> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.11 sec) mysql> quit Bye
이젠 먼저 MySQL 데몬을 실행한 도스창을 닫으시고 정상적으로 MySQL 데몬을 실행하시면 변경할패스워드 로 MySQL root 패스워드가 변경되 었습니다. ■ UNIX 플랫폼 MySQL 이 실행되고 있다면
[root@ns /root]# mysql.server stop
또는
[root@ns /root]# killall mysqld
위와 같은 방법으로 MySQL 데몬을 종료 합니다. 이제 승인 절차를 거치지 않도록 MySQL 데몬을 실행합니다.
[root@ns /root]# safe_mysqld --skip-grant &
이제 MySQL root 패스워드를 변경합니다.
[root@ns /root]# mysql Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 2918080 to server version: 4.0.16 Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> use mysql; Database changed mysql> UPDATE user SET password=PASSWORD('변경할패스워드') where user='root'; Query OK, 0 rows affected (0.14 sec) Rows matched: 1 Changed: 0 Warnings: 0 mysql> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.11 sec) mysql> quit Bye
이제 MySQL 데몬을
[root@ns /root]# killall safe_mysqld
위와 같이 종료 하시고 다시 실행시켜 주시면 변경된 패스워드로 동작 합니다.


Posted by happydong
, |



 

MSSQL 2008 플랜캐시(Plan Cache) 삭제하기

출처 : http://ddoung2.tistory.com/242
 

 


엄청 오랫만에 글을 포스팅 하는것 같아요. 이래저래 정신없고 포스팅 할 여유가 없었네요 ~ ! 이번 글을 계기로 다시 한번 열심히 포스팅에 불을 -0-;;

오늘 울 DB Team.에 팀장으로 새로 오신 차주언 형님이 MSSQL 2008에 Adhoc 플랜캐시가 적재되는 bug가 있다하여 일일 작업으로 해당 Adhoc 플랜캐시를 삭제해줘야 한다고 하여, Job Schedule 로 만들어 보았습니다.

우선 아래 스크립트를 이용하여 현재 서버에 어떤 Adhoc 쿼리가 쌓여 있는지 한번 알아보았습니다. 제가 사용하고 있는 TEST 서버에서는 해당 쿼리를 실행시켰을때 사용하지도 않았던 이상한 update 쿼리문이 약 3000개가 적재되어 있더군요.

SELECT

text,

usecounts,

plan_handle

FROM SYS.DM_EXEC_CACHED_PLANS

CROSS APPLY SYS.DM_EXEC_SQL_TEXT(PLAN_HANDLE)

WHERE USECOUNTS = 1

AND OBJTYPE = 'ADHOC'


그럼 해당 Adhoc 플랜캐시가 도대체 얼마만큼이나 메모리에 올라가 있는지 아래 쿼리로 확인해 보았습니다. 제 경우는 그렇게 크게 메모리에 올라가 있지 않았지만, 주언 형님의 말씀으로는 약 2GB이상 올라가 있는것도 보았다고 하더군요.

SELECT objtype AS [CacheType]

, count_big(*) AS [Total Plans]

, sum(cast(size_in_bytes as decimal(12,2)))/1024/1024 AS [Total MBs]

, avg(usecounts) AS [Avg Use Count]

, sum(cast((CASE WHEN usecounts = 1 THEN size_in_bytes ELSE 0 END) as decimal(12,2)))/1024/1024 AS [Total MBs - USE Count 1]

, sum(CASE WHEN usecounts = 1 THEN 1 ELSE 0 END) AS [Total Plans - USE Count 1]

FROM sys.dm_exec_cached_plans

GROUP BY objtype

ORDER BY [Total MBs - USE Count 1] DESC


자~~~ 그럼 플랜캐시가 얼마만큼 올라가 있고, 그 플랜캐쉬가 얼마만큼의 메모리를 사용하고 있는지 보았으니, 해당 플랜캐시를 주기적으로 삭제하기 위해서 MSSQL 스케쥴러에 등록해 보겠습니다.

아래 쿼리는 Adhoc 플랜캐시를 메모리상에서 지우는 쿼리를 프로시저로 만드는 쿼리 입니다.

USE [master]

GO

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

/*************************************************************************

** Name : MSSQL 2008 Server 에서AdHoc 플랜캐쉬삭제

** Desc : MSSQL 2008 Server 에서AdHoc 플랜캐쉬삭제

** EXEC :

** Auth : 이승연(gamebible)

** Date : 2011-01-31

**************************************************************************

** Change History

**************************************************************************

** Date: Author: Description:

** ---------- -------- ---------------------------------------

**

*************************************************************************/

ALTER PROCEDURE [dbo].[usp_SYSTEM_AdHoc_FREEPROCCACHE]

AS

BEGIN

SET NOCOUNT ON;

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

/*******************************************************************

** 변수선언

*******************************************************************/

DECLARE @MAX INT;

DECLARE @PLAN_HANDLE VARCHAR (1000);

DECLARE @SQL_TEXT VARCHAR(MAX);

/*******************************************************************

** 변수선언

*******************************************************************/

/*******************************************************************

** 임시테이블삭제

*******************************************************************/

IF EXISTS(SELECT * FROM tempdb.sys.sysobjects where name like '#T_PLAN_HANDLE%')

DROP TABLE #T_PLAN_HANDLE;

/*******************************************************************

** 임시테이블삭제

*******************************************************************/

/*******************************************************************

** 임시테이블생성

*******************************************************************/

CREATE TABLE #T_PLAN_HANDLE (

IDX INT IDENTITY(1,1) ,

PLAN_HANDLE VARBINARY (1000)

);

/*******************************************************************

** 임시테이블생성

*******************************************************************/

/*******************************************************************

** AdHoc 플랜캐쉬핸들저장

*******************************************************************/

INSERT INTO #T_PLAN_HANDLE

SELECT

PLAN_HANDLE

--, *

FROM SYS.DM_EXEC_CACHED_PLANS

CROSS APPLY SYS.DM_EXEC_SQL_TEXT(PLAN_HANDLE)

WHERE

USECOUNTS = 1

AND OBJTYPE = 'ADHOC'

/*******************************************************************

** AdHoc 플랜캐쉬핸들저장

*******************************************************************/

/*******************************************************************

** AdHoc 플랜캐쉬삭제

*******************************************************************/

SELECT @MAX = MAX(IDX) FROM #T_PLAN_HANDLE;

WHILE (@MAX > 0) BEGIN

SELECT @PLAN_HANDLE = SYS.FN_SQLVARBASETOSTR( PLAN_HANDLE) FROM #T_PLAN_HANDLE WHERE IDX = @MAX;

SET @SQL_TEXT = 'DBCC FREEPROCCACHE ('+CAST(@PLAN_HANDLE AS VARCHAR(8000))+')';

EXEC (@SQL_TEXT)

--print @sql_text

SET @MAX = @MAX - 1

END

/*******************************************************************

** AdHoc 플랜캐쉬삭제

*******************************************************************/

END


그리고 스케쥴러에 등록해 보아요.

USE msdb

GO

EXEC sp_add_job @job_name = 'AdHoc 플랜캐쉬삭제'

EXEC sp_add_jobstep

@job_name = 'AdHoc 플랜캐쉬삭제' ,

@step_id = 1 ,

@step_name = 'AdHoc 플랜캐쉬삭제' ,

@subsystem = 'TSQL' ,

@command = 'EXEC [dbo].[usp_SYSTEM_AdHoc_FREEPROCCACHE];' ,

@database_name = 'master'

EXEC sp_add_jobschedule

@job_name = 'AdHoc 플랜캐쉬삭제' ,

@name = '일정' ,

@freq_type = 4 , -- 매일

@freq_interval = 1 , -- 한번

@active_start_time = 60000 -- HHMMSS

EXEC sp_add_jobserver

@job_name = 'AdHoc 플랜캐쉬삭제' ,

@server_name = N'(local)'


해당 스케쥴러는 매일 한번 새벽 6시에 돌아가게 해두었습니다.

Posted by happydong
, |



 타켓 DB에 테이블(Table)이 몇개가 존재하는지 확인하기 위해 아래와 같이 "information_schema.tables" 테이블을 조회하면 된다. 



USE MYDB

GO

 

SELECT COUNT(*) FROM information_schema.tables

WHERE TABLE_TYPE = 'base table'

 



Posted by happydong
, |