다른 두 가지 답변의 상태가 정확하기 때문에 어셈블리는 특정 데이터베이스에로드되고 시스템 전체는 아닙니다 ( assembly_id
값 이 시스템 전체에서 고유 하다는 것이 확실합니다 ). 이는 이들이로드 된 각 데이터베이스와 함께 백업 및 복원됨을 의미합니다.
또한, enabled
/ 용 disabled
의 설정 CLR Integration
(비아 sp_configure
) 인 시스템 전체. 참고로이 설정은 사용자가 만든 CLR 기능 에만 적용 됩니다. 특정 내장 기능에 따라 CLR이 항상 사용됩니다.
즉, 여기에있는 다른 두 가지 대답은 유효한 점을 제시하지만 그 점은 SQLCLR에 국한되지 않으며 SQLCLR 코드와 관련된이 결정을 내리는 요인에 대한 언급은 없습니다. 각 데이터베이스에 코드를 배포 할 경우 (데이터베이스가 많다고 가정 할 때) 잠재적 인 리소스 경합 문제, 잠재적 보안 관련 문제 등을 고려해야 할 메모리 문제가 있습니다.
중앙 데이터베이스와 개별 데이터베이스 배포 사이를 결정할 때 특히 SQLCLR 코드에 대해 명심해야 할 포괄적 인 목록을 제공했습니다. 여기에 목록을 복제하지 말고 다음 답변을 참조하십시오 (DBA.SE에도 있습니다).
성능 관점에서 CLR 기능을 더 잘 사용하는 방법 (각 DB 내부에서 반복하거나 일반 기능이 있음)?
또한 관련 메모에서 데이터베이스가 왜 설정되어 있는지 궁금합니다 TRUSTWORTHY ON
. 질문에 언급 된 기능 (예 : "문자열 차단기, 이메일 유효성 검사, URL 인코딩 /베이스 디코딩, base64 등")은 모두 SAFE
어셈블리 내에서 가능합니다 . 꼭 필요한 경우가 아니면 EXTERNAL_ACCESS
, UNSAFE
perission_set 값을 사용해서는 안됩니다 . 이 기능의 일부 번호 필요한 경우, 그때 그에만 포함 된 별도의 조립에 있어야 SAFE
코드를 같은 데이터 액세스를하지 않는 스칼라 함수 것을 하고 로 표시된는 IsDeterministic = true
존재의 성능 이점을 활용할 수있을 것입니다 병렬 계획에 참여할 수 있습니다.