내 테이블 구조를 행동하는 다중 노드를 사용하기 위해 MemSQL 설정을 이동하려고 할 때 모든 것이 잘 작동하지만 한
아래처럼 짧은 그것을 유지하기 위해, 많은 열을 제거한
CREATE /*!90618 REFERENCE*/ TABLE `fact_orderitem_hourly_release_update`
(
`order_id` int(11) NOT NULL DEFAULT '0',
`customer_login` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
`warehouse_id` int(11) DEFAULT NULL,
`city` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
`store_id` int(11) DEFAULT NULL,
PRIMARY KEY (`order_id`)
);
CREATE TABLE `fact_orderitem_hourly_scale` (
`order_id` int(11) NOT NULL DEFAULT '0',
`order_group_id` int(11) NOT NULL DEFAULT '0',
`item_id` int(11) NOT NULL,
`sku_id` int(11) NOT NULL DEFAULT '0',
`sku_code` varchar(45) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
`po_type` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
`store_order_id` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
`bi_last_modified_on` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00.000000',
PRIMARY KEY (`item_id`,`sku_id`),
/*!90618 SHARD */ KEY `sku_id` (`sku_id`),
KEY `idx_fact_orderitem_hourly_lmd` (`bi_last_modified_on`),
KEY `idx_fact_orderitem_hourly_ord` (`order_id`),
KEY `idx_order_group_id` (`order_group_id`),
KEY `idx_store_order_id` (`store_order_id`)
);
내 부하 스크립트 :
mysql -h$LiveMemSQL_DB -u$LiveMemSQL_USER --password=$LiveMemSQL_PASS -P$LiveMemSQL_PORT --verbose reports_and_summary < /home/titan/brand_catalog/upsert_memsql_orl_update.sql
Contents of .SQL File :
--start of .sql file
TRUNCATE TABLE reports_and_summary.fact_orderitem_hourly_release_update;
#Load data into staging
LOAD DATA LOCAL INFILE '/myntra/redshift/delta_files/live_scale_order_release_upd.txt' INTO TABLE reports_and_summary.fact_orderitem_hourly_release_update LINES TERMINATED BY '\n';
#Insert/Update statement
INSERT INTO reports_and_summary.fact_orderitem_hourly_scale
(
item_id,
sku_id,
customer_login,
order_status,
is_realised,
is_shipped,
shipping_charge,
gift_charge,
warehouse_id,
city,
store_id
)
select
fo.item_id,
fo.sku_id,
fr.customer_login,
fr.order_status,
fr.is_realised,
fr.is_shipped,
fr.shipping_charge,
fr.gift_charge,
fr.warehouse_id,
fr.city,
fr.store_id
from fact_orderitem_hourly_release_update fr
join fact_orderitem_hourly_scale fo
on fr.order_id=fo.order_id
ON duplicate key update
customer_login=values(customer_login),
order_status=values(order_status),
is_realised=values(is_realised),
is_shipped=values(is_shipped),
shipping_charge=values(shipping_charge),
gift_charge=values(gift_charge),
warehouse_id=values(warehouse_id),
city=values(city),
store_id=values(store_id);
--end .SQL 파일,536,913,632 10
mysql 커맨드 라인 클라이언트를 통해 위의 .sql을 트리거 할 때, 때때로 작동하고 많은 시간을하지 않으며, 동일한 .sql 파일을 계속 5-10 회 실행하면 업데이트가 실행됩니다. 이러한 실행 중 하나에서 영향을 받고 예를 들어 order_id 101 및 SHIPPED 상태의 레코드가 3 개 있고 병합 테이블에서 업데이트를 얻은 경우 주문 상태가 DELIVERED (이상적으로 모든 주문의 상태가 이상적임)로 변경되었다고 할 때가 있습니다. DELIVERED로 변경되었지만 주문과 관련된 행 중 하나 또는 두 개만 업데이트됩니다.하지만 MySQLWorkbench를 통해 동일한 .sql 파일 내용을 실행하면 완벽하게 작동하지만 어리석은 것처럼 보일 수 있습니다. 그러나 이것이 무슨 일입니까? 이 이상한 행동으로 지난 이틀 동안 고생하다
이 동작을 캡처 한 아래 화면 캐스트를 찾으십시오. https://www.youtube.com/watch?v=v2HN-n4V0MI&feature=youtu.be
내가 위와 유사한 SQL을 사용하여 repro 수하려고 준비 테이블이 아닌 참조 할 수 있지만 didn 히 't repro, 업데이 트가 나를 위해 잘 작동합니다. 스키마와 쿼리가 일치하지 않으므로 정확한 SQL을 사용할 수 없습니다. 쿼리에는 스키마에없는 열이 있습니다. 오류를 관찰 한 정확한 스키마/쿼리 집합을 게시 할 수 있습니까? 또한 어떤 버전을 사용하고 있습니까? –
@JackChen MemSQL 버전은 5.5.3이며 오류를 재현하기 위해 여기에서 파일과 스크립트를 찾을 수 있습니다. https://www.dropbox.com/s/ao8viv2wzfoh8a3/memsql_insert_update.zip?dl=0 –
그리고 클러스터 설정은 다음을 사용하고 있습니다. 하나의 마스터이고 2 노예 r3.2xlarge 인스턴스 –