There could be a huge difference in refresh time depending on whether you are doing an incremental refresh and a full refresh. A full refresh will truncate the materialized view and completly rebuild it, compared with just updating rows that have changed. To do an incremental refresh you need to make sure that the underlying tables have log files, if something happened to one of the log files, then the refresh might go from incremental to full. Just a hunch.