본문 바로가기

SQL Server/SQL Server Tip & Tech

sp_procedure_params_rowset

sp_procedure_params_rowset

ADO 2.5 기준으로 설명을 하자면...
(ADO .NET에서도 동일한 원리로 같은 문제가 발생한다.)

Command개체의 Parameters컬렉션에 포함된 Refresh 메서드를 사용해 sp를 호출하는 경우, "sp_procedure_params_rowset"이라는 system sp가 먼저 실행되는데.. 이는 호출 할 sp의 메타 데이터를 리턴해 주는 역할을 한다.

Refresh 메서드가 주는 잇점이란... 코딩의 간결함이다. 즉, 호출할 sp의 파라미터를 코딩할 때 데이터 타입을 정의하지 않아도 DB로부터 메타데이터를 리턴 받아 자동으로 바인딩해 주기 때문이다.

문제는... 코딩의 편의로 인해 시스템 성능이 희생당하는 것.

물론 성능 문제를 수치로 얘기할 수 있어야 하고... 이 수치가 코딩 편의성에 비추어 희생할 만한 가치가 있는지 아닌지를 판단하는 것이 정석이겠지만... 많은 DBA의 경험에 비추어 보면 - 프로필러 상에서 sp_procedure_params_rowset이 차지하는 비용이 작지 않다. - sp_procedure_params_rowset은 DB에서 실행되지 않도록 개발팀에서 지원해 주는 것이 좋을 것 같다.

절충안으로는 sp 메타 데이터를 캐시하는 무언가를 만드는 것 정도를 생각해 볼 수 있겠다.