저는 최근에 거의 200 개의 테이블을 다루는 대학을위한 합리적으로 복잡한 데이터베이스 응용 프로그램을 만들었습니다. 일부 테이블 (예 : Publications)은 30 개 이상의 필드를 보유하고 10 개의 일대일 FK 관계 및 최대 2 또는 3 개의 다 대다 FK 관계 (crossreference-ref 테이블 사용)를 저장할 수 있습니다. 처음부터 끝까지 정수 ID를 사용하고 정규화가 모든 단계에서 핵심적인 역할을했습니다. AJAX는 최소한이고 대부분의 페이지는 표준 CRUD 양식/프로세스입니다. Symfony + Doctrine의 성능을 어떻게 향상시킬 수 있습니까?
나는 심포니 1.4, 교리 ORM 1.2, MySQL은, PHP를 사용했다. 개발 시간과 유지 보수의 용이성 혜택 (AN MVC와 ORM을 사용하여) 엄청난되었지만, 우리는 속도에 문제가 있었어요. 즉, 한 번에 몇 명의 사용자가 로그인하고 활성 상태가되면 응용 프로그램이 느려지 게됩니다 (레코드를 저장하거나 편집하는 데 최대 20 초).
우리는 현재 우리의 시스템 관리자와 토론에 종사하고 있지만 그들은 우리가 충분한 전력을 가져야한다고 말한다. 6 명 이상의 사용자가 작업을 수행하면 가상 서버 환경에서 4 개의 CPU를 대기 상태로 유지하면서 메모리 사용량은 적습니다 (번짐 없음).
물론 우리는 우리의 mySQL 애플리케이션을 멀티 스레딩하는 것을 고려하고 있습니다. (도움이된다면), 우리 코드를 수정하고 (비록 MVC에서 생성 된 것이 많지만) 캐시 사용을 개선합니다. 사용 된 화면의 대다수는 사용자 로그인 특정 및 동적입니다. 우리는 APC, 여분의 메모리, 데이터베이스의 조각 모음을 해 놓았습니다. 모든 레코드 세트를 해제하려고 시도했습니다. (ORM 내에서 자동으로 실행됩니다.)
질문 mSQL, PHP 및 Symfony MVC가 실제로이 크기의 응용 프로그램을 개발하는 데 실제로 좋지 않은지 묻습니다. 그렇다면 사람들은 일반적으로 이러한 종류의 크기/복잡성을 가진 웹 기반 데이터베이스 인터페이스 응용 프로그램에 대해 무엇을 사용하고/권장합니까?
죄송합니다. 아마도 우리의 mySQL 데이터베이스를 다중 채널링했음을 의미 할 것입니다. – user982220
그래서 어떤 프로세스가 리소스를 먹을지 결정 했습니까? 무엇이 메모리와 CPU를 손상시키는 지 보지 않고 최적화하는 것은 의미가 없습니다. 또한 귀하의 질의가 최적임을 보장하는 것은 무엇입니까? 테이블의 수는 아무 것도 아니다. 중요한 것은 데이터의 크기, b-tree의 크기와 메모리 사용량을 결정하는 인덱스 방법 (buffer_pool_size가 충분히 큰 InnoDB를 사용한다고 가정 할 때)이다. 그래서 당신의 질문에 대답하는 것은 어렵고 누구나 무엇이 잘못되었는지를 짐작할 수 있습니다. 그것은 교리 또는 PHP에 대한 책임을 비난하는 것은 너무 일찍, 어느 과정이 먼저 자원을 먹는 지 확인하십시오. –
그렇지 않으면 당신의 시스템에 만족한다면 그것을 척하기 전에 그것을 최적화 할 수있을 것입니다. 많은 요소가 있습니다. 먼저 실행중인 쿼리에 대해 데이터베이스에 적절한 인덱스가 없을 수도 있습니다. 느린 쿼리 로그를 켜고 거기에있는 쿼리를 검사하고 explain 명령을 사용하여 느린 쿼리가 인덱싱되지 않은 검색을 수행하는지 여부를 확인하십시오. 필요에 따라 색인을 추가하십시오. – AllInOne