**Apache Airflow version**: 2.1.0

**What happened**:

We use a python script that reads JSON configs from db to dynamically generate DAGs. Sometimes, when JSON Configs is updated, we expect DAGs to be removed in Airflow.  This doesn't always happen. From my observation, one of the following happens:
1) DAG is removed because the python script no longer generates it.
2) DAG still exists but run history is empty. When trigger the DAG, first task is stuck in `queued` status indefinitely.

**What you expected to happen**:
I expect the right behavior should be 
>1) DAG is removed because the python script no longer generates it.

**How to reproduce it**:
* Create a python script in DAG folder that dynamically generates multiple DAGs
* Execute these dynamically generated DAGs a few times
* Use Airflow Variable to toggle (reduce) the # of DAGs generated
* Examine if number of dynamically generated DAGs in the web UI


airflow/models/dag.py
return self._default_view
    @property
    def pickle_id(self) -> Optional[int]:
        return self._pickle_id
    @pickle_id.setter
    def pickle_id(self, value: int) -> None:
        self._pickle_id = value
    def param(self, name: str, default=None) -> DagParam:
        """
        Return a DagParam object for current dag.
        :param name: dag parameter name.
        :param default: fallback value for dag parameter.
        :return: DagParam instance for specified name and current dag.
        """
        return DagParam(current_dag=self, name=name, default=default)
    @property
    def tasks(self) -> List[BaseOperator]:
        return list(self.task_dict.values())
    @tasks.setter
    def tasks(self, val):
        raise AttributeError('DAG.tasks can not be modified. Use dag.add_task() instead.')
    @property
    def task_ids(self) -> List[str]:
        return list(self.task_dict.keys())
    @property
    def task_group(self) -> "TaskGroup":
        return self._task_group
    @property
    def filepath(self) -> str: