2014-09-29 8 views
0

NetScaler 9에 도입 된 새로운 DataStream 기능 (v10에 있음)을 사용하여 콘텐츠를 전환합니다 (여기에서 설명 : http://support.citrix.com/proddocs/topic/netscaler/ns-dbproxy-wrapper-con.html). 우리에게는 읽기 전용 가상 서버가 여러 개의 읽기 전용 MySql 슬레이브간에 균형을 이룹니다. 우리는 컨텐트 스위칭을 사용하여 모든 "선택"을 읽기 전용 서버로 보냅니다.MySql NetScaler DataStream 콘텐츠 스위칭이 감지되지 않음 선택

정책은 다음과 같은 구성 :

mysql.req.query.command.contains("select") 

우리의 사용자가 우리의 데이터베이스 서버에 여러 부분으로 쿼리를 보냅니다. 대부분 다음과 같이 간단합니다.

use database; 
select col1 from table1; 

간혹 질문의 머리에 의견을 달아줍니다. 예를 들면 다음과 같습니다.

-- this is my query 
select col1 from table1; 

쿼리에서 select로 시작하면 모든 것이 원활하게 작동합니다. 그러나 쿼리 이전에 use 문이나 주석이있는 경우 콘텐츠 검색자가이 쿼리가 선택 쿼리임을 감지하지 못하고 읽기 전용 가상 서버를 무시합니다.

저는 모든 쿼리에서 모든 테이블의 별칭을 지정하고 사용 문 (예, 이것이 좋은 방법입니다)을 피하고 개발자가 SQL에서 주석을 사용할 수 없다고 말하려고합니다. 어리 석다).

내 NetScaler DataStream Content Switching을 구성하여 주석 및 사용 문을 무시하는 방법을 아는 사람이 있습니까?

답변

2

인증을 성공적으로 수신 한 첫 번째 행에서 쿼리를 보낼 위치를 결정 했으므로 주석을 무시하면 작동하지 않습니다. "로드 균형 조정 된 VIP로 보낸 명령에 SQL 주석을 사용하지 마십시오."라는 오류 메시지를 다시 보내는 응답자 정책을 설정할 수 있습니다. 약간 무례하지만 devs는 메시지를 상당히 빨리 얻을 수 있습니다. 그러나 주석을 무시할 방법이 없지만 select 문에 대한 결정을 기반으로합니다. 그러나, 나는 select 문이 첫 번째 세미콜론까지 있다는 인상하에있었습니다 ... 위의 예제에서, (이론적으로) select 문을 여전히 찾아야합니다. 그러나 나는 그 행동의 확실성을 시험해 볼 필요가있다.

또한 USE 문은 매우 중요합니다. 이것은 모든 후속 명령이 _ 행되는 DB입니다. USE 문을 사용하지 말고 select 문을 다음과 같이 변경하는 것이 가장 좋습니다. select col1 from database.table1;

일단 USE 문이 표시되면 후속 명령이 동일한 연결로 파이프 라인되는 것을 방지합니다. 따라서 많은 Use 문이 있으면 DataStream과 함께 제공되는 다중 연결 기능을 사용할 수 없습니다.

+0

고마워요. Ronan. 일반적으로 적절한 데이터베이스 이름을 사용하여 각 테이블의 별칭을 지정하는 것이 좋습니다. 그러나 자연스럽게 항상 그런 것은 아닙니다. 우리가 해결할 수있는이 것. 저를 데려 오는 그 코멘트. 쿼리 파서가 주석 행을 무시할 수없는 이유를 이해하지 못합니다. 첫 번째 행을 취하고 - 또는 #로 시작하면 두 번째 행을 페치합니다. –

0

차단 수준 주석은 허용되지만 한 줄 주석은 허용되지 않는다는 것을 알게되었습니다.

이 제대로 무시됩니다 :

/* my comment */ 

이 주석 스타일을 쿼리의 일부로 취급됩니다 : 말도 SET 한 자동 커밋 = 0의

-- my comment 
# my comment 
0

종류가 완벽하게 합리적이다. 그 상황은 어떨까요?