2012-09-18 3 views
0

대량 삽입 문을 사용할 마이그레이션을 작성하고 있습니다. DB에서 특정 정보를 검색합니다. &은 특정 테이블에서 사용중인 형식으로이를 컴파일합니다. &은 아래의 INSERT 메소드를 사용하여 씁니다. 이 모든 것을 실행할 MySQL 시스템은 max_allowed_packet 크기가 16MB이며 변경할 수 없습니다.MySQL 벌크의 버퍼 크기를 결정하는 방법 INSERT

나는 이것에 상당히 새롭다. 필자는 버퍼가 16MB 미만인 버퍼를 삽입하려고 시도했습니다. 이것은 작동하지 않습니다. max_allowed_packet 크기가 16MB를 초과하면 &으로 인해 문제가 발생합니다. 그 이유는 그들이 무엇을하고 있는지를 아는 누구에게나 분명합니다 (그러나 나에게는 그렇지 않습니다).

주어진 max_allowed_packet 크기로 삽입 할 수있는 문자 수를 계산하는 방법을 알아야합니다. 우리는 INNODB 스토리지 엔진을 사용하고 있습니다.

이 더 많거나 적은 내 삽입 문처럼 보이는 것입니다 : 나는 더 많은 정보를 제공해야하는 경우

INSERT INTO _table_ (col_name1, col_name2, col_name3) 
     VALUES (val1, val2, val3), (val1, val2, val3), (val1, val2, val3)... etc. 

알려 주시기 바랍니다. 이 시점에서 나는 무엇을해야할지 정말로 모른다.

질문을 명확히하기 위해 편집 됨. 이것은 클라이언트가 구성 설정에 대한 서버를 요청할 수 있습니다

show variables like 'max_allowed_packet'; 

: 내가 제공하는 링크와 웹 페이지에 사용자 의견을 읽기

+1

예 MySQL 클라이언트/서버의 max_allowed_packet 크기는 기본적으로 16MB이지만 구성 가능합니다 . 이것은 my.cnf에서 설정됩니다. https://dev.mysql.com/doc/refman/5.5/en/packet-too-large.html –

+0

@Darryl - 감사. 내 문제를 아주 잘 설명하지 않았거나 적절한 용어를 사용하지 않은 것 같습니다. 나는 max_allowed_packet 설정이 어디에 있는지 이해한다. 문제는 패킷 크기를 초과하지 않고 삽입 할 수있는 데이터의 양을 결정하는 방법을 모르겠다는 것입니다.서버에서 max_allowed_packet 크기를 변경하는 것은 나를위한 옵션이 아닙니다. – SecondSun24

답변

0

명령을 산출한다.

Variable_name  Value 
max_allowed_packet, 1048576 

응용 프로그램은 물론 클라이언트 SQL 드라이버를 제어하여 일치하도록 (또는 더 크게) 설정합니다.

1

비슷한 문제가 발생하여 시행 착오를 발견했습니다.

  1. max_allowed_packet-1은 쿼리가 가질 수있는 최대 문자 수입니다. 쿼리에
  2. 빈 공간 쿼리 전을위한

의 길이에 추가됩니다.

INSERT INTO _table_ (col_name1) Values('value1') -- 1 

그러나 쿼리로이 생각보다 짧은

INSERT INTO _table_ (col_name1 ) Values('value1' ) -- 2 

문자열 길이의 관점에서 생각할 때 이것은 상당히 명백한 보일 수 있습니다 그리고 당신은 모두 정확히 같은 행동을 기대합니다.
max_allowed_packet이 '1'보다 길고 '2'보다 작 으면 1이 제대로 실행되는 동안 2가 실행되지 않습니다.