2009-09-17 2 views
0

이 시나리오에는 LAN (서버 A)과 원격 위치 (서버 B)의 두 가지 데이터베이스 서버가 있습니다.원격 서버의 DELETE/INSERT 성능 향상

우리 프로젝트의 데이터를 서버 A에서 서버 B로 전송하려고합니다. 이렇게하려면 먼저 특정 ProjectID에 대해 서버 B의 기존 데이터를 제거한 다음 서버 A에서 서버 B로 데이터를 삽입하기 만하면됩니다. 모든 데이터는 서버 A에서 준비됩니다.

실제 전송되는 데이터 양은 대략 2.5MB입니다. 20MBit 연결을 사용하면이 작업을 한 번에 완료해야합니다. 그러나 SQL을 사용하면 30-40 초가 소요됩니다. 실제로 같은 양의 데이터를 FTP로 전송하는 경우 4 초가 걸립니다. :)

SET NO COUNT가 켜져 있습니다. 원격 쿼리를 더 빨리 수행 할 수 있다고 읽었습니다.
왜 이렇게 느린 전송을 일으킬 수 있습니까?

편집 :
SQL이 실제로 발생해야합니다.
- 모든 종류의 데이터베이스에서 데이터를 선택하고 서버 A의 DB에 삽입
- 서버 B에서 삭제 DB 어디 ProjectID = x
- 서버 B에 삽입 DB - 선택 * 서버에서 DB ProjectID = x

마지막 두 단계는 약 40 초가 걸립니다. 그리고 제가 알기로는 오래된 레코드를 제거하고 새로운 레코드를 삽입하는 것입니다. 조인이 없거나 t-SQL 구문이 어렵습니다.

+0

당신이 우리에게 좀 더 많은 정보를 주어야한다고 생각합니다. SQL이 원인이라고 생각한다면 아마도 의사 코드를 보여줄 것입니다. – dave

+0

나는 dave에 동의하지만 일반적인 대답을 –

답변

1

삭제가 발생한 데이터베이스 B의 디자인과 구조를 철저히 검사합니다. 인덱스가 잘 설계되고 최적화되었는지 확인하고, 외래 키 관계를 확인하고, 삭제가 발생한 테이블을 참조하는 다른 테이블에 대한 계단식 삭제와 어떤 관련이 있는지 확인하고 삭제 관련 트리거를 확인하고 수행중인 작업을 확인하십시오.

또한 원격 서버 자체를 검사하여 하드 드라이브 나 드라이브 컨트롤러와 같은 하드웨어에 문제가 없는지 확인합니다. 나는 엄청난 속도 저하를 겪고있는 데이터베이스를 한 번 가지고있었습니다. 범인을 실패한 RAID 카드로 확인하는 데 한 달이 걸렸습니다.

그 원인이 아닌 경우 두 대의 서버로 네트워크를 통해 처리량 테스트를 실행하여 실제 대역폭이 실제로 사용되고 있는지 확인하십시오. 다른 데이터가 20MBit 연결을 공유하는지보십시오. 아마도 과부하/실패 라우터 또는 스위치가 어느 시점에 있거나 라우터/스위치 중 하나에 잘못된 DNS 정보가있어 올바른 경로를 따라 데이터를 보내지 못하는 것일 수 있습니다.

0

A에서 선택, B에서 삽입, A에서 삭제 하시겠습니까? 당신은 단지 A로부터 선택할 수 있습니다

는 을 B로 삽입하고 완료되면 당신은

은 또한 대량 작업을 사용 (여러 ProjectID의의를 선택)하고 다른 서버에 삽입 할 수 있습니다 삭제할 ​​수 있습니다.

ProjectID가 기본 키이거나 클러스터 된 인덱스인지 확인하십시오. 먼저 ProjectID로 검색 할 필요가없는 솔루션을 먼저 찾아야합니다. 또한

당신이 삽입하는 동안 어떤

가 마지막으로 멀티 스레드 또는 여러 프로세스가 당신에게 어떤 혜택을 줄 수 있습니다 (서버 A에서 선택할 필요가없는 경우 두 서버에서 모든 기록, 백업, 변경 추적 및 통계를 비활성화 할 수 있습니다 서버 B에서).

-3

당신은 또한 사용할 수 있습니다 mysqldump를 :

mysqldump를 --create-옵션 --disable-키 --extended-삽입 --quick --quote-이름 잠금을 --add --complete 삽입 -u $ 사용자 --password = $ 암호 $ 데이터베이스 | gzip -fast -c> {$ backupPath}/$ database. $ dateStr.sql.gz

그런 다음 네트워크를 통해 gzip으로 처리 된 덤프를 전송하고 새 데이터베이스로 다시로드하십시오.

+0

이라고 게시 할 것입니다.) – Zyphrax

+0

OMG :) 그러나 MySQL은 일반적으로 SQL 서버입니다. 어쨌든 SQL 덤프는 http : //sqldump.sourceforge에 적용됩니다. net/ –

+0

[bugs_in_sqldump] (http://sourceforge.net/tracker/?group_id=45686&atid=443719 "sqldump의 버그") 목록! 떨어지는 탑에 더 많은 벽돌을 추가하는 것이 일반적으로 도움이되지 않습니다. [예제] (http://example.com "title") – Jaywalker

0

서버 b의 테이블을 점검하여 트리거가 있는지 확인 했습니까? Perhpas 그들은 감속을 일으키고 있습니다.

+0

일반 데이터베이스, 트리거 없음 – Zyphrax