2011-03-03 3 views
2

외부 변수에 대한 동시 요청을 제한하기 위해 카운팅 세마포 (semaphore)를 증가 및 감소시키는 정수 변수를 저장하고 싶습니다. 이것은 병렬 SQL 에이전트 작업에서 실행되는 SSIS 패키지에서이 변수를 읽고 쓰는 방법이 필요하다는 점을 제외하면 쉽습니다. 현재 SQL 에이전트 작업의 인스턴스가 0 ~ 5 개이므로 SSIS 패키지가 한 번에 실행될 수 있습니다.SSIS 교차 프로세스 통신에는 어떤 옵션이 있습니까?

이 변수를 읽거나 쓰려면 어떻게해야합니까? 이 변수를 사용할 코드는 .NET에서 사용자 지정 SSIS 작업으로 작성됩니다.

일반적으로 값이 정확히 맞으면 중요하지 않습니다. 일반적으로 허용 오차 범위 내에 있습니다. 정확한 것은 좋지만 필수는 아닙니다.

전체적으로 파일 시스템, 레지스트리, 데이터베이스, 서버 및 SSIS 에이전트에 액세스 할 수 있지만이 변수를 매우 자주 15-30 스레드까지 확인하고 싶습니다.이 스레드는 일반적으로 파일 시스템 방법 (나는 아마 잘못하고있다), IMO가 데이터베이스에 저장하기에 너무 집중적이다. 틀 렸으면 고쳐줘. 레지스트리에 저장하면 서버 팜에서 변수에 액세스 할 수 없습니다.

도움이 될만한 사람이 있다면 기꺼이 당신의 연인이 될 것입니다.

+4

그냥이 값이 데이터베이스 테이블에 살 수없는 이유가 궁금하십니까? 5 개의 모든 인스턴스에서 해당 인스턴스를 읽을 수 있어야합니다. 적절한 경우 적절한 잠금을 사용해야합니다. 그렇지 않으면 문제가 단순화되는 것일 수 있습니다. 값을 가져 오거나 업데이트해야하는 경우 SqlClient를 통해 사용자 지정 작업의 코드를 통해 값을 가져올 수 있습니다. – kd7

+0

주된 이유는 단순히 내가하고있는 데이터베이스와 이야기하는 양입니다. 위의 개요는 어느 정도 간단합니다. 즉, 5 개의 인스턴스 각각은 루프 내에서 변수에 액세스하는 모든 스레드를 최대 20 개까지 가질 수 있습니다. 변수가 특정 임계 값 미만이 될 때까지 기다립니다. 최악의 시나리오는 초당 약 100 건의 쿼리를 처리하는 것으로 가정합니다. 현재 그들은 로컬 프로세스 변수를 기다리는 동안 100ms 동안 자고 있습니다. 희망이 도움이됩니다. – Jordan

답변

1

카운팅 세마포어로 사용되는 경우 실제로 Windows 세마포어 개체를 사용하지 않는 이유는 무엇입니까? System.Threading.Semaphore는 .NET 버전이며, 생성자에서 세마포어 이름을 지정하면 Win32 개체가이 이름을 사용하는 모든 프로세스간에 공유됩니다.

+0

당신은 남자입니다. 정보를 제공해 주셔서 감사합니다. 저는 몇 달 전에이 수업에 대해 알고 싶습니다. 웬일인지 그것은 검색하는 동안 결코 나오지 않았다. 나는 직장에서 돌아올 때 이것을 줄 것이다. – Jordan

0

잘 모르겠습니다. 데이터베이스, 파일 시스템, 레지스트리 등에 대한 액세스 권한이 있음을 알았습니까? 이러한 방법을 사용하고 싶지 않거나 사용할 수 없다는 말입니까? 컴퓨터가 멈출 때 복구 할 수있는 경우 값을 유지하려고합니까?

지속성이 필요하지 않은 경우 COM 또는 웹 서비스를 포함하여 RPC를 통해 메모리에 유지할 수 있습니다. 해결책이 무엇이든간에, 실행중인 모든 인스턴스에서 전역 적으로 볼 수 있어야합니다.

이 가변 메타 데이터는 프로세스를 제어하고 조정하는 세마포어로 사용됩니까? 아니면이 가변 도메인 데이터입니까?

+0

위의 방법을 사용할 수있는 방법이나이 변수에 대한 액세스를 제어하는 ​​데 사용할 수있는 모르는 것에 대한 입력을 찾고 있습니다. 실제로 외부 API에 대한 동시 요청 수를 조정하는 데 사용되는 카운팅 세마포어입니다. 지속성은 필요하지 않습니다. 왜냐하면 무언가가 실패 할 경우 중단 한 곳을 선택할 수있는 큐 시스템이 있기 때문입니다. – Jordan

+0

고려해야 할 몇 가지 개념이 있습니다. 외부 프로세스가 여러 스레드로 작동하는지 또는 외부 프로세스의 여러 인스턴스가 각각 하나의 스레드로 작동합니까? 외부 프로세스에 여러 스레드가 들어있는 경우 (이 외부 프로세스가 변경 가능하다고 가정하면) 스레드 수를 계산하는 카운터를 추가하고 외부 프로세스에 적절한 인터페이스를 포함시켜 개수를 검색 할 수 있습니다.외부 프로세스가 멀티 스레드가 아니고 단일 스레드가 있고 여러 인스턴스가있는 경우 프로세스 수를 사용하면 이러한 세부 사항이 제공됩니다. – barrypicker

관련 문제