ad-hoc SQL (예 : "SELECT foo FROM tablename"
)을 사용하여 MSSQL 데이터베이스를 호출 할 때 해당 호출의 일괄 처리 크기를 지정할 수 있습니다. 이것은 많은 데이터가 반환 될 것으로 기대할 때 매우 유용합니다.페이지 매김 또는 mssql_execute() 호출을 일괄 처리하는 방법은 무엇입니까?
필자의 경우 2 억 개가 넘는 행이있는 테이블이 있는데, 모두 가져오고 있습니다. 예, 이런 큰 돼지 데이터가되는 이유가 있습니다.
DB 사람들은 "이봐, 여기에 임시 SQL을 사용하지 마라.이 멋진 SP를 사용하라. 똑같은 일을한다"고 말했다.
그래서 나는mssql_execute()
함수 호출로 사용하고 있지만,
mssql_query()
로 존재하는 한이 일을 내가뿐만 아니라이 ini_set('memory_limit', '64G')
을해야 할 때 배치 크기를 지정할 수있는 방법은 없습니다; 이 일을하기 위해 SP 통화가 30 분 이상 걸리는만큼 물건을 땀을 흘려야합니다. 일단 실행되면 mssql_fetch_row()
에 루프를 수행 할 수 있지만 아무런 문제가 없지만 초기 호출은 못 박는 행위입니다!
그리고 끝나면 57G의 메모리 (96G 상자에 있음)를 사용하여 풀고 가비지 수집을 위해 80 % CPU에서 1 시간이 걸립니다. 그래, 그 과정을 죽일 수는있어.하지만 그건 해킹이야.
더 좋은 방법이 있습니다.
ad-hoc SQL에서는 배치 크기가 10,000 행인 mssql_query()
을 호출하고 처리 한 다음 다시 돌아갑니다. 그런 다음 에코 (echo)와 같은 작업을 수행 할 수 있습니다. "예, 실제로, 저는 지금 행 $i
에 있습니다 ..."그리고 모든 것이 제대로 실행되고 있다는 편집증을 풀어보십시오.
그래서 DB를 사용하기를 원한다면 어떻게해야할까요?
DB 사용자에게 당신이 제안한 것을 물었습니까 ?? – etr